shell脚本(二)
if语句的结构和使用
在简单的Shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程。然而,单一的顺序结构使得脚本过于机械化,不够“智能”,难以处理更加灵活的系统任务。本章将学习如何进行条件测试操作,并通过正确使用if语句,使Shell脚本具有一定的“判断“能力,以根据不同的条件来完成不同的管理任务。
条件测试
test 条件表达式
[ 条件表达式 ]
这两种方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程习惯。需要注意的是.方括号“[”或“]”与条件表达式之间需要至少—个空格进行分隔。
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读.可写、可执行等。文件测试的常见操作选项如下,使用时将测试对象放在操作选项之后即可。
-d:测试是否为目录(Directory )。
-e:测试目录或文件是否存在(Exist)。
-f:测试是否为文件(File)。
-r:测试当前用户是否有权限读取(Read )。
-w,测试当前用户是否有权限写入(Write)。
-x:测试是否设置有可执行(Excute)权限。
整数值比较
整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。整数值比较的常用操作选项如下,使用时将操作选项放在要比较的两个整数之间。
-eq:第一个数等于第二个数。
-ne:第一个数不等于第二个数。
-gt:第一个数大于第二个数。
-lt:第一个数小于第二个数。
-le:第一个数小于或等于第二个数。
-ge:第一个数大于或等于第二个数。
字符串比较
字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。字符串比较的常用操作选项如下。
=:第一个字符串与第二个字符串相同。
!=:第一个字符串与第二个字符串不相同,其中“!”符号表示取反。
-z,检查字符串是否为空〈Zero),对于未定义或赋予空值的变量将视为空串。
逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。常用的逻辑测试操作如下,使用时放在不同的测试语句或命令之间。
&&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为0(结果成立)。使用test命令测试时,“&&”可改为“—a”。
||:逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为0(结果成立)。使用test命令测试时,“ll”可改为“一o”。
!:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)。
单if语法
if 条件
then
执行的命令
fi
双if语法结构
if 条件
then
执行的命令1
else
执行的命令2
fi
多if条件语法结构
if 条件1
then
执行的命令1
elif 条件2
then
执行的命令2
fi
else
执行的命令3
fi
实验
编写名为sysmon.sh的 Shell监控脚本。
监控内容包括CPU使用率、内存使用率、根分区的磁盘占用率。
百分比只需精确到个位,如7%、12%、23%等。
出现以下任一情况时告警﹔磁盘占用率超过90%、CPU使用率超过80%、内存使用率超过
90%。
告警邮件通过mail命令发送到 monitor@bdqn , com。
结合crond服务,每半小时执行一次监控脚本。
1、创建sysmon.sh脚本文件
[root@centos01 ~]# vim sysmon.sh
2、编写脚本命令 (监控CPU 内存 根分区磁盘占用率)
#!/bin/bash
q=expr 1785.6
w=expr 71502429.6
test=vmstat | grep "2" | awk '{print $15}'
neicun=free -m | grep "Mem:" | awk '{print $3}'
.0
cpu=expr 100 - $test
cipan=df | grep "/$" | awk '{print $3}'
.0
if [ ( e c h o " (echo " (echo"q < n e i c u n " ∣ b c ) − e q 1 ] t h e n e c h o " neicun" | bc) -eq 1 ] then echo " neicun"∣bc)−eq1]thenecho"q < n e i c u n " e l s e e c h o " neicun" else echo " neicun"elseecho"q > n e i c u n " f i e c h o " neicun" fi echo " neicun"fiecho"neicun $cpu $cipan"
if [ $cpu -ge 80 ] || [ ( e c h o " (echo " (echo"q < $neicun" | bc) -eq 1 ] || [ ( e c h o " (echo " (echo"w < $cipan" | bc) -eq 1 ]
then
if [ $cpu -ge 80 ]
then
echo “cpu使用率超过80%”
echo “cpu使用率超过80%” >> /root/警告.txt
#echo “CUP使用率超过80%” | mail -s “Linux警示” monitor@bdqn.com
fi
if [ $q < $neicun ]
then
echo “内存使用率超过90%”
echo “内存使用率超过90%” >> /root/警告.txt
#echo “CUP使用率超过80%” | mail -s “Linux警示” monitor@bdqn.com
fi
if [ $w < $cipan ]
then
echo “磁盘使用超过90%”
echo “磁盘使用超过90%” >> /root/警告.txt
#echo “磁盘使用率超过90%” | mail -s “Linux警示” monitor@bdqn.com
fi
else
echo “无异常”
echo “无异常” > /root/警告.txt
fi
3、创建crontab
[root@centos01 ~]# crontab -e
*/1 * * * * /usr/bin/sh test01.sh
3、创建crontab
[root@centos01 ~]# crontab -e
*/1 * * * * /usr/bin/sh test01.sh