linux中通过条件执行脚本,Shell脚本应用-条件测试操作

linux中通过条件执行脚本,Shell脚本应用-条件测试操作

2023年8月2日发(作者:)

linux中通过条件执⾏脚本,Shell脚本应⽤-条件测试操作通过博⽂Shell脚本应⽤(⼀),可以在简单的Shell脚本程序中,各类语句将按先后顺序依次执⾏,从⽽实现批处理的⾃动化过程,然⽽,单⼀的顺序结构使得脚本国语机械化,不够“智能”,难以处理更加灵活的系统任务。今天我们将认识并掌握如何进⾏条件测试操作,并通过正确使⽤if语句,使Shell脚本具有⼀定的“判断”能⼒,以根据不同的条件来完成不同的管理任务。⼀、条件测试操作要使Shell脚本具有⼀定的“智能”,⾯临的第⼀个问题就是如何区分不同的情况已确定执⾏何种操作。例如:当磁盘使⽤率达到某个点时,发出警告信息等操作。Shell环境根据命令执⾏后的返回状态值($?)来判断是否执⾏成功,当返回值为0时,表⽰成功;当返回值为⾮0时,则表⽰失败。使⽤专门的测试⼯具——test命令,可以对特定条件进⾏测试。使⽤test测试命令时,两种语法:格式1:test 条件表达式或者格式2:[ 条件表达式 ]这两种⽅式的作⽤完全相同,但通常第⼆种语法格式较为适⽤。但是需要注意:第⼆种语法格式中括号“[ 条件表达式 ]”与条件表达式⾄少需要⼀个空格进⾏分隔!根据需要测试的条件类型不同,条件表达式也不同,⽐较常⽤的条件操作包括:1.⽂件测试⽂件测试指的是根据特定的路径,判断对应的⽂件是⽬录还是⽂件,或者是否可读、可写、可执⾏等操作。常⽤的选项有:-d:测试是否为⽬录(Directory)-e:测试⽬录或⽂件是否存在(Exist)-f:测试是否为⽂件(File)-r:测试当前⽤户是否有权限读取(Read)-w:测试当前⽤户是否有权限写⼊(Write)-x:测试当前⽤户是否有权限执⾏(eXcute)执⾏条件测试操作以后,通过预定义变量$?来获得测试命令的返回值,从⽽判断该条件是否成⽴。⽐如:[root@localhost ~]# [ -d /mnt ] //测试/mnt是不是⼀个⽬录[root@localhost ~]# echo $? //查看前⼀条命令的返回值0 //0表⽰条件成⽴,⾮0则表⽰条件不成⽴为了更直观的查看测试效果,可以结合“&&”和“echo”命令⼀起使⽤。⽐如:[root@localhost ~]# [ -d /etc ] && echo "yes"yes //输出“yes”表⽰条件成⽴,不输出“yes”则表⽰条件不成⽴2.整数值⽐较整数值⽐较指的是根据给定的两个整数值,判断第⼀个数与第⼆个数的关系,⽐如等于、⼤于、⼩于等。常⽤的选项有:-eq:等于(Equal)-ne:不等于(Not Equal)-gt:⼤于(Greater Than)-lt:⼩于(Lesser Than)-le:⼩于或等于(Lesser or Equal)-ge:⼤于或等于(Greater or Equal)整数值⽐较在Shell甲苯编写中的应⽤较多。例如,⽤来判断已登录⽤户数量、开启的进程数等。⽐如:[root@localhost ~]# A=`who | wc -l`[root@localhost ~]# [ $A -eq 3 ] && echo "nice"nice //查看当前登录⽤户为3的话输出“nice”3.字符串⽐较字符串⽐较通常⽤⼒啊检查⽤户输⼊、系统环境等是否满⾜条件,在提供交互式操作的S我回来了脚本中,也可以⽤来判断⽤户输⼊的位置参数是否符合要求。常⽤的参数有:=:字符串内容相同!=:字符串内容不同,! 号表⽰相反的意思-z:字符串内容为空语法格式:[ 字符串1 = 字符串2 ][ 字符串1 != 字符串2 ][ -z 字符串 ]4.逻辑测试逻辑测试指的是判断两个或多个条件之间的依懒关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成⽴或其中⼀个成⽴等情况,需要有⼀个测试过程,常⽤的参数有:-a或&&:逻辑与,“⽽且”的意思-o或||:逻辑或,“或者”的意思!:逻辑否语法格式:格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ...格式2:命令1 操作符 命令2 ...⼆、使⽤if语句结构通过刚才的条件测试可以完成简单的判断并执⾏相应的曹组,但是当需要选择执⾏的命令语句较多时,这种⽅式会使代码显得复杂且不好理解。我们可以适当的使⽤if语句,来整理脚本结构,使得层次分明、清晰易懂。1)if语句的结构在Shell脚本应⽤中,if语句是最常⽤的⼀种流程控制⽅式,⽤⼒啊根据特定的条件测试结果,分别执⾏不同的操作(如果……那么……)。根据不同的复杂程度,if语句的选择结构可以分为三种基本类型,适⽤于不同的应⽤场合。1.单分⽀if语句if语句的:“分⽀”指的是不同测试结果所对应的执⾏语句(⼀条或多条)。对于if但分⽀的选择结构,只有在“条件成⽴”时才会执⾏相应的代码,否则不执⾏任何操作。1)单分⽀if语句的语法结构:if条件测试操作then命令序列fi语句结构中,条件测试操作可以是“[ 条件表达式 ]”语句,也可以是其他可指定的命令语句,命令序列指的是⼀条或多条可执⾏的命令⾏,也包括嵌套使⽤的if语句或其他流程控制语句。2)单分⽀if语句的流程图:3)单分⽀if语句应⽤⽰例:[root@localhost ~]# vim //随便定义脚本名称#!/bin/bash //声明使⽤什么ShellA="/mnt/cdrom" //定义变量if //关键字(如果)[ !-d $A ] //$A变量不是⼀个⽬录的话then //关键字(那么)mkdir -p $A //创建这个变量所对应的⽬录fi //关键字(结束)[root@localhost ~]# sh //执⾏脚本[root@localhost ~]# ll /mnt总⽤量 0drwxr-xr-x. 2 root root 6 7⽉ 30 12:19 cdrom //验证效果2.多分⽀if语句对于多分⽀的选择结构,要求针对“条件成⽴”、“条件不成⽴”两种情况分别执⾏不同的操作。1)双分⽀if语句的语法结构:if条件测试操作then命令序列1else命令序列2fi2)双分⽀if语句流程图:3)双分⽀if语句应⽤⽰例:[root@localhost ~]# vim #!/bin/bashping -c 3 -i 0.2 -W 3 $1 &>/dev/null //检查⽬标主机是否可以连通if //关键字(如果)[ $? -eq 0 ] //测试上⼀条命令的返回结果then //关键字(那么)echo "Host $1 is up"else //关键字(否则)echo "Host $1 is down"fi //关键字(结束)#(注释)代码中,为了提⾼ping命令的测试率,使⽤“-c”表⽰只发送三个测试包;“-i”表⽰间隔时间为0.2秒;“-W”表⽰超时时间3秒。另外使⽤ “ &> /dev/null”屏蔽ping命令执⾏过程的输出信息。[root@localhost ~]# sh 192.168.1.1Host 192.168.1.1 is down //执⾏脚本测试返回结果3.多分⽀if语句由于if语句可以根据测试结果的成⽴、不成⽴分别进⾏操作,所以能够嵌套使⽤,进⾏多次判断。1)多分⽀if语句语法结构:if条件测试操作1then命令序列1elif条件测试操作2then命令序列2else命令序列3fi2)多分⽀if语句流程图:3)多分⽀if语句应⽤⽰例:(1) 应⽤⽰例(⼀)[root@localhost ~]# vim #!/bin/bashread -p "请输⼊您的分数(0——100):" Aif[ $A -ge 85 ] && [ $A -le 100 ] //85~100分,优秀thenecho "$A分,优秀!"elif[ $A -ge 70 ] && [ $A -le 84 ] //70~84分,及格thenecho "$A分,及格!"elseecho "$A分,不及格!" //其他分数,不及格fi[root@localhost ~]# sh 请输⼊您的分数(0——100):6666分,不及格![root@localhost ~]# sh 请输⼊您的分数(0——100):7979分,及格![root@localhost ~]# sh 请输⼊您的分数(0——100):9999分,优秀!//验证执⾏脚本效果(2)应⽤⽰例(⼆)⽰例要求:(1)使⽤df命令提取出根分区的磁盘占⽤率,赋值给变量DUG。(2)使⽤mpstat命令提取CPU使⽤率(需安装sysstat软件包),赋值给变量CUG。(3)使⽤free命令提取出内存使⽤率,赋值给变量MUG。(4)判断上述监控项⽬是否超标,将需要告警的信息保存到/tmp/⽂件。(5)判断/tmp/⽂件是否存在,若存在则作为告警邮件发送。[root@localhost ~]# vim #!/bin/bash# 提取性能监控指标(磁盘占⽤、CPU使⽤、内存使⽤)DUG=$(df -hT | grep "/$" | awk '{print $6}' | awk -F% '{print $1}')CUG=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))MUG=$(expr $(free | grep "Mem:" | awk '{print $3}') * 100 / $(free | grep "Mem:" | awk '{print $2}'))# 设置告警⽇志⽂件、告警邮箱ALOG="/tmp/"AMAIL="root"# 判断是否记录告警if [ $DUG -ge 0 ]thenecho "磁盘占⽤率:$DUG %" >> $ALOGfiif [ $CUG -ge 0 ]thenecho "CPU使⽤率:$CUG %" >> $ALOGfiif [ $MUG -ge 0 ]thenecho "内存使⽤率:$MUG %" >> $ALOGfi# 判断是否发送告警邮件,最后删除告警⽇志⽂件if [ -f $ALOG ]thencat $ALOG | mail -s "Host Alert" $AMAILrm -rf $ALOGfi[root@localhost ~]# sh [root@localhost ~]# mail //查看邮件Heirloom Mail version 12.5 7/5/10. Type ? for help."/var/spool/mail/root": 1 message 1 newN 1 root Tue Jul 30 13:01 20/662 "Host Alert"&…………………… //省略部分内容磁盘占⽤率:26 %CPU使⽤率:1 %内存使⽤率:18 % //验证结果#(注释)实验环境,⼤于等于0就发送邮件,实际⽣产环境视情况⽽定!也可以这样查看邮件:[root@localhost ~]# cat /var/spool/mail/root…………… //省略部分内容磁盘占⽤率:26 %CPU使⽤率:1 %内存使⽤率:18 %您在 /var/spool/mail/root 中有邮件

发布者:admin,转转请注明出处:http://www.yc00.com/news/1690919209a463489.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信