if语句的结构和使用

在简单的Shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程。
然而,单一的顺序结构使得脚本过于机械化,不够“智能”,难以处理更加灵活的系统任务。
本章将学习如何进行条件测试操作,并通过正确使用if语句,使Shell脚本具有一定的“判断“
能力,以根据不同的条件来完成不同的管理任务。

整数比较

-eq 等于,如:if [ “a"−eq"a" -eq "a"−eq"b” ]
-ne 不等于,如:if [ “a"−ne"a" -ne "a"−ne"b” ]
-gt 大于,如:if [ “a"−gt"a" -gt "a"−gt"b” ]
-ge 大于等于,如:if [ “a"−ge"a" -ge "a"−ge"b” ]
-lt 小于,如:if [ “a"−lt"a" -lt "a"−lt"b” ]
-le 小于等于,如:if [ “a"−le"a" -le "a"−le"b” ]
< 小于(需要双括号),如:((“a"<"a" < "a"<"b”))
<= 小于等于(需要双括号),如:((“a"<="a" <= "a"<="b”))

  大于(需要双括号),如:(("$a" > "$b"))

= 大于等于(需要双括号),如:((“a">="a" >= "a">="b”))

字符串比较
= 等于,如:if [ “a"="a" = "a"="b” ]
== 等于,如:if [ “a"=="a" == "a"=="b” ],与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ KaTeX parse error: Expected 'EOF', got '#' at position 15: a == z* ]] #̲ 如果a以"z"开头(模式匹配)那么将为true
2 [[ KaTeX parse error: Expected 'EOF', got '#' at position 14: a == "z*" ]] #̲ 如果a等于z*(字符匹配),那么结果为true
3
4 [ KaTeX parse error: Expected 'EOF', got '#' at position 16: a == z* ] #̲ File globbing …a" == “z*” ] # 如果a等于z∗(字符匹配),那么结果为true一点解释,关于Fileglobbing是一种关于文件的速记法,比如"∗.c"就是,再如也是.但是fileglobbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.!=不等于,如:if["a等于z*(字符匹配),那么结果为true 一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是. 但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像. != 不等于,如:if [ "a等于z∗(字符匹配),那么结果为true一点解释,关于Fileglobbing是一种关于文件的速记法,比如"∗.c"就是,再如 也是.但是fileglobbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.!=不等于,如:if["a" != “b"]这个操作符将在[[]]结构中使用模式匹配.<小于,在ASCII字母顺序下.如:if[["b" ] 这个操作符将在[[]]结构中使用模式匹配. < 小于,在ASCII字母顺序下.如: if [[ "b"]这个操作符将在[[]]结构中使用模式匹配.<小于,在ASCII字母顺序下.如:if[["a” < “b"]]if["b" ]] if [ "b"]]if["a” < “$b” ]
注意:在[]结构中"<"需要被转义.

  大于,在ASCII字母顺序下.如:
   if [[ "$a" > "$b" ]]if [ "$a" \> "$b" ]注意:在[]结构中">"需要被转义.具体参考Example 26-11来查看这个操作符应用的例子.

-z 字符串为"null".就是长度为0.
-n 字符串不为"null"
注意:
使用-n在[]结构中测试必须要用"“把变量引起来.使用一个未被”“的字符串来使用! -z
或者就是未用”“引用的字符串本身,放到[]结构中。虽然一般情况下可
以工作,但这是不安全的.习惯于使用”"来测试字符串是一种好习惯.
逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程。常用的逻辑测试操作如下,使用时放在不同的测试语句或命令之间。

&&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为0
(结果成立)。使用test命令测试时,“&&”可改为“—a”。
||:逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为0
(结果成立)。使用test命令测试时,“ll”可改为“一o”。
!:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为0(结
果成立)。


################################################################################################

单if语法

if 条件then​ 执行的命令fi

双if语法结构

if 条件then​ 执行的命令1
else​ 执行的命令2fi

多if条件语法结构

if 条件1then​ 执行的命令1elif 条件2​ then​ 执行的命令2fielse​ 执行的命令3fi

实验


编写root下的sysmon.sh脚本文件

[root@CentOS ~]# vim /sysmon.sh

#!/bin/bash#内存总大小
nczong=`free -m | grep "Mem:" | awk '{print $2}'`
#使用内存大小
neicun=`free -m | grep "Mem:" | awk '{print $3}'`
#计算内存使用率
a=`expr $nczong / 100`
neucunlv=`expr $neicun / $a`
#查看CPU使用率
b=`vmstat | grep "2" | awk '{print $15}'`
cpu=$(expr 100 - $b)
#查看磁盘大小
cipan=`df -Th | grep "/$" | awk '{print $6}' | awk -F % '{print $1}'`
if [ $neicunlv > 90 ]
then
echo "内存使用率超过90%,可能影响到正常使用"
echo "内存使用率超过90%,可能影响到正常使用" >> /root/警告.txt
# echo "内存使用率超过90%,可能影响到正常使用"| mail -s "Linus警告" monitor@bdan.com
fi
if [ $cipan -ge 90 ]
then
echo "磁盘使用率超过90%,可能影响到正常使用"
echo "磁盘使用率超过90%,可能影响到正常使用" >> /root/警告.txt
# echo "磁盘使用率超过90%,可能影响到正常使用"| mail -s "Linus警告" monitor@bdan.comfi
if [ $cpu -ge 80 ]
then
echo "CPU使用率超过80%,可能影响到正常使用"
echo "CPU使用率超过80%,可能影响到正常使用" >> /root/警告.txt

结合crond服务,监控脚本
[root@CentOS ~]# crontab -e

*/1 * * * * /usr/bin/sh /root/sysmon.sh

shell脚本——if语句相关推荐

  1. shell 脚本循环语句

    shell脚本循环语句 一.循环语句 1.1 for循环语句 1.2 for循环语法 1.3 for循环案例 1.4 类C风格循环 二.while语法 2.1 语法结构 2.2 while语法使用的一 ...

  2. shell脚本常用语句用法笔记

    脚本基本语句用法笔记 grep -i 查询时不区分大小写 -n打印匹配的行号 -v 打印不匹配的行 -AX包括每次匹配之后X行 -BX包括每次匹配之后X行 cat /etc/passwd |grep ...

  3. linux中脚本循环语句,Shell脚本循环语句

    Shell作为一种脚本编程语言,同样了包含了循环,分支等其他程序控制结构,从而能够轻松完成更加复杂.强大的功能.我们今天就来认识if.for.while.case语句的具体应用. 一.使用if语句结构 ...

  4. shell脚本if语句判断

    if条件判断语句,通常以if开头,fi结尾,也可加入else或者elif进行多条件的判断 如下 : if (表达式) 语句1 else 语句2 fi if语句Shell脚本编程案例如下: #!/bin ...

  5. Shell脚本——条件语句

    shell脚本--编程条件语句(条件测试.if语句.case分支语句) 一.条件测试 1.1 Test命令 1.2 文件测试 1.3整数值比较 1.4字符串比较 1.5逻辑测试 二.if语句 2.1 ...

  6. Shell脚本循环语句及exit、continue和break用法

    目录 一.for循环语句 二.while循环语句结构 三.until 循环语句结构 四.exit.continue和break 一.for循环语句 用法: 读取不同的变量值,用来逐个执行同一组命令 f ...

  7. shell脚本——循环语句

    shell脚本--编程之循环语句(for.while.until) 一.输出字符串或提取Shell变量的值--echo命令 二.for循环语句 三.while循环 while 猜数字小游戏 四.unt ...

  8. linux sh文件case,Shell脚本case语句简明教程

    Shell case语句为多选择语句.可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: case 值 in 模式1) command1 command2 ...

  9. linux的shell脚本if语句,Shell脚本编程之判断语句

    一.单分支if语句 格式:if 判断条件:then statement1 statement2 ... fi 二.双分支的if语句 格式:if 判断条件; then statement1 statem ...

最新文章

  1. 展望2018:WebRTC大规模商用元年
  2. 机器学习算法基础知识
  3. Linux疑难杂症解决方案100篇(一)-静态链表全解析
  4. 数据中心液体冷却技术的五个主要关注点
  5. 在enable mmu之前可以使用mmu了
  6. Flutter监听音量实现波形可视化的音频
  7. 做运营,你需要“一张画布绘到底”
  8. 为什么要用MyBatis-Hibernate
  9. 一些ASP.NET不能调试问题的解决办法!
  10. javascript实现页面跳转的方法
  11. Python编程一定要注意的那些“坑”(四)
  12. android 保留edittext中的文字不被后面添加的文字覆盖_【Go语言绘图】图片添加文字(一)...
  13. 克鲁赛德战记服务器无响应,克鲁赛德战记闪退黑屏登不上怎么办 解决方法
  14. 震撼!七大议题全数入选!九州云与您相约温哥华
  15. 微信无法定位 请打开定位服务器,微信定位开了还是无法定位(定位打开了无法获取位置)...
  16. python类似图片查找_python检测相似图片
  17. 导出pdf文件时加图片水印
  18. 华为p40pro什么时候能用上鸿蒙系统,华为P40 PRO+5G+鸿蒙系统!华为2020年最期待的手机?...
  19. 访问hfds报错AccessControlException
  20. require(‘inquirer‘)报错

热门文章

  1. iphone 图片拉伸不变形的方法
  2. Python实现人脸识别检测, 对美女主播照片进行评分排名
  3. 可以用jQuery代替$避免冲突
  4. 谷歌官方流海适配方案
  5. 数论之因子个数的求法
  6. generate...for的用法
  7. 防火墙路由器交换机原理
  8. lucene 4.3 ansj分词演示
  9. 详解Visual Studio 2010中ASP.NET新增23项功能
  10. 182-muduo网络库(陈硕)编程