linux实战(三)----执行shell脚本----详细步骤讲解
2016-02-14 12:35
831 查看
我们在上一篇中已经学习了一些shell的脚本实例。
在实战(二)中我们对脚本的运行 使用了命令的方式,也就是直接 粘贴 在 控制台中 回车运行。
我们发现一些实例 已经出现了 2个以上的函数。 所以 当作命令行来运行显得太多了。
这次我们学习 把脚本 写入sh文件 然后 执行shell脚本sh文件。
我们以 实战(二)中的 监控目录占用的系统磁盘空间 为例子 学习运行shell脚本sh的完整步骤。
grep 和 awk 过滤得到某个目录的磁盘空间使用百分比。
df -k 查看硬盘的使用情况 -k 表示以k字节为单位
"$1$" 表示接受第一个参数也就是目录 并且与$号组成字符串 这里$表示正则中的结束符
grep "$1$"则表示 以该目录为结尾的 行
awk '{print $5}' 取第5列
awk -F% '{print $1}'` 用%号分割后取第1列
那么我们把它写成一个sh文件。
步骤如下:
新建一个命令为checkSpace.txt文件,加上sh文件头标识#!/bin/bash后 把 以上函数和命令 写进入,再重命名成checkSpace.sh即可。
如图:
./的意思是说在当前的工作目录下执行checkSpace.sh。如果不加上./,bash可能会响应找到不到checkSpace.sh的错误信息。
因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。
或
注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将checkSpace.sh作为参数传给sh(bash)命令来执行的。这时不是checkSpace.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了。
或
前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。
现在我们就按方法一来运行。
首先需要把sh文件送到 linux系统的 /data/shell目录中。
我这里文件传输使用的是SSH Secure File Transfer Client工具。
操作工具使用的PieTTY
PieTTY下载:
window系统连接linux系统的工具PieTTY
用linux的ip和帐号root,ssh默认端口是22登录输入密码后把sh文件放到/data/shell目录中。joe帐号权限不够
我们发现还没有/data/shell目录。则在pieTTY中用su命令切换到root账户新建目录并给执行权限。
关于权限有不了解的可参考chmod命令:
linux基础(七)----linux命令系统学习----系统安全相关命令
给checkSpace.sh文件执行权限
按照方法一运行sh脚本:
运行成功:
如果你在windows里写的shell脚本放到linux系统里运行就可以会提示如下错误syntax error near unexpected token `...这是因为两个平台下面的换行符不一样导致的。所以需要转换下格式,notepad++就有这个功能。
首先打开notepad++,让脚本显示所有符号,发现是CR LF
我们需要将windows的格式转为linux格式,做如下操作即可。
编辑->档案格式转换->转换为UNIX格式
转换之后,发现回车换行符就变LF了。再放入linux就不会报错了。
linux实战(二)----shell脚本监控实例-----日志截取三个命令在性能监控等运用中的实例解析
在实战(二)中我们对脚本的运行 使用了命令的方式,也就是直接 粘贴 在 控制台中 回车运行。我们发现一些实例 已经出现了 2个以上的函数。 所以 当作命令行来运行显得太多了。
这次我们学习 把脚本 写入sh文件 然后 执行shell脚本sh文件。
我们以 实战(二)中的 监控目录占用的系统磁盘空间 为例子 学习运行shell脚本sh的完整步骤。
了解监控目录占用的系统磁盘空间的代码
思路
系统磁盘空间检测是系统资源检测的重要部分,在系统维护维护中,我们经常需要查看服务器磁盘空间使用情况。因为有些业务要时时写话单,日志,或者临时文件等,如果磁盘空间用尽,也可能会导致业务中断,下面的函数可以检测当前系统磁盘空间中某个目录的磁盘空间使用情况 . 输入参数为需要检测的目录名,使用 df 输出系统磁盘空间使用信息,然后通过grep 和 awk 过滤得到某个目录的磁盘空间使用百分比。
实例代码
函数-通过目录名获取占用空间
function GetDiskSpc { if [ $# -ne 1 ] then return 1 fi Folder="$1$" DiskSpace=`df -k |grep $Folder |awk '{print $5}' |awk -F% '{print $1}'` echo $DiskSpace }
函数-判断占用空间是否超过90%
function CheckDiskSpc { DiskSpace=`GetDiskSpc $1` echo "The system $Folder disk space is $DiskSpace%" if [ $DiskSpace -gt 90 ] then { echo "The usage of system disk($Folder) is larger than 90%" } else { echo "The usage of system disk($Folder) is normal" } fi }
程序详解
$# 这个函数的参数个数 函数中判断如果参数个数不为1则返回1df -k 查看硬盘的使用情况 -k 表示以k字节为单位
"$1$" 表示接受第一个参数也就是目录 并且与$号组成字符串 这里$表示正则中的结束符
grep "$1$"则表示 以该目录为结尾的 行
awk '{print $5}' 取第5列
awk -F% '{print $1}'` 用%号分割后取第1列
使用函数
CheckDiskSpc /boot
写shell脚本
我们已经知道了监控目录占用系统磁盘空间使用的函数和命令。那么我们把它写成一个sh文件。
步骤如下:
新建一个命令为checkSpace.txt文件,加上sh文件头标识#!/bin/bash后 把 以上函数和命令 写进入,再重命名成checkSpace.sh即可。
#!/bin/bash function GetDiskSpc { if [ $# -ne 1 ] then return 1 fi Folder="$1$" DiskSpace=`df -k |grep $Folder |awk '{print $5}' |awk -F% '{print $1}'` echo $DiskSpace } function CheckDiskSpc { DiskSpace=`GetDiskSpc $1` echo "The system $Folder disk space is $DiskSpace%" if [ $DiskSpace -gt 90 ] then { echo "The usage of system disk($Folder) is larger than 90%" } else { echo "The usage of system disk($Folder) is normal" } fi } CheckDiskSpc /boot
如图:
Linux中执行shell脚本的4种方法总结
bash shell 脚本的方法有多种,现在作个小结。假设我们编写好的shell脚本的文件名为checkSpace.sh,文件位置在/data/shell目录中并已有执行权限。方法一
切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本:cd /data/shell ./checkSpace.sh
./的意思是说在当前的工作目录下执行checkSpace.sh。如果不加上./,bash可能会响应找到不到checkSpace.sh的错误信息。
因为目前的工作目录(/data/shell)可能不在执行程序默认的搜索路径之列,也就是说,不在环境变量PASH的内容之中。查看PATH的内容可用 echo $PASH 命令。现在的/data/shell就不在环境变量PASH中的,所以必须加上./才可执行。
方法二
以绝对路径的方式去执行bash shell脚本:/data/shell/checkSpace.sh
方法三
直接使用bash 或sh 来执行bash shell脚本:cd /data/shell bash checkSpace.sh
或
cd /data/shell sh checkSpace.sh
注意,若是以方法三的方式来执行,那么,可以不必事先设定shell的执行权限,甚至都不用写shell文件中的第一行(指定bash路径)。因为方法三是将checkSpace.sh作为参数传给sh(bash)命令来执行的。这时不是checkSpace.sh自己来执行,而是被人家调用执行,所以不要执行权限。那么不用指定bash路径自然也好理解了。
方法四
在当前的shell环境中执行bash shell脚本:cd /data/shell . checkSpace.sh
或
cd /data/shell source checkSpace.sh
前三种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。而方法四则是在当前shell中执行的。
执行shell
上面我们已经准备好了sh文件,也学习了执行sh文件的几种方法。现在我们就按方法一来运行。
首先需要把sh文件送到 linux系统的 /data/shell目录中。
我这里文件传输使用的是SSH Secure File Transfer Client工具。
操作工具使用的PieTTY
PieTTY下载:
window系统连接linux系统的工具PieTTY
用linux的ip和帐号root,ssh默认端口是22登录输入密码后把sh文件放到/data/shell目录中。joe帐号权限不够
我们发现还没有/data/shell目录。则在pieTTY中用su命令切换到root账户新建目录并给执行权限。
关于权限有不了解的可参考chmod命令:
linux基础(七)----linux命令系统学习----系统安全相关命令
mkdir -p /data/shell
给checkSpace.sh文件执行权限
按照方法一运行sh脚本:
cd /data/shell chmod 777 checkSpace.sh ./checkSpace.sh
运行成功:
可能遇到的问题
syntax error near unexpected token `的问题如果你在windows里写的shell脚本放到linux系统里运行就可以会提示如下错误syntax error near unexpected token `...这是因为两个平台下面的换行符不一样导致的。所以需要转换下格式,notepad++就有这个功能。
首先打开notepad++,让脚本显示所有符号,发现是CR LF
我们需要将windows的格式转为linux格式,做如下操作即可。
编辑->档案格式转换->转换为UNIX格式
转换之后,发现回车换行符就变LF了。再放入linux就不会报错了。
相关文章推荐
- linux实战(三)----执行shell脚本----详细步骤讲解
- Use the Get-Command PowerShell Cmdlet to Find Parameter Set Information
- 开机自启动Powershell脚本
- Powershell 音乐播放
- Powershell指令集_2
- Powershell 邮件发送
- Linux系统中bash shell编程的10个基础问题讲解
- Linux shell编程中IO和条件及循环处理的细节问题讨论
- 为什么直接执行shell脚本可以,但crontab下执行错误
- 为什么直接执行shell脚本可以,但crontab下执行错误
- bash脚本之二(语法+测试)
- Shell脚步学习指南提点
- [小脚本] bash维护并行下载任务
- 一个简单的弹出对话框的shellcode(取自0day2一书)
- shell 10进制转16进制输出
- 【Android】通过adb shell命令查看内存,CPU,启动时间,电量等信息
- /bin/bash^M: bad interpreter: No such file or dire
- shell编程【分发系统】
- bash脚本之一(变量+数组)
- Shell排序的递增序列