一、if介绍

如何写一个高可用性的脚本,赋予脚本智能化,赋予脚本执行逻辑。
比如nginx安装脚本中

  • configure执行成功在执行make,
  • make执行成功在执行make install
  • 上一步错误就不需要执行后面的代码了。

answer: 加入判断
只要你想在代码中判断一下的时候就第一时间想到if就行了,适用于99%的语言。
当我们在写程序的时候,时常对上一步执行是否成功如何判断苦恼,当我们今天学习了if就可以解决你的苦恼。if语句在我们程序中就是用来做判断的,以后大家不管学习什么语言,以后只要涉及到判断的部分,大家就可以直接拿if来使用,不同的语言之间的if只是语法不同,原理是相同的。

二、单if语法

适用范围:只需要一步判断,条件返回真干什么。
语句格式

  1. if [ condition ] #condition 值为true or false
  2. then #条件为真的时候执行
  3. commands #代码块 一行或者多行代码
  4. fi #语句的结束

12-shell流程控制-if判断语句 - 图1
该语句翻译成汉语大意如下:

  1. 假如 条件为真
  2. 那么
  3. 执行commands代码块
  4. 结束

通过一段代码来演示一下吧,判断 当前用户是不是root,如果不是那么返回”ERROR: need to be root so that!“

  1. #!/bin/bash
  2. #Author: www.zutuanxue.com
  3. #Created Time:
  4. #Script Description:
  5. if [ $USER != 'root' ]
  6. then
  7. echo "ERROR: need to be root so that"
  8. exit 1
  9. fi

三、if…else语句

适用范围==:两步判断,条件为真干什么,条件为假干什么。

  1. if [ condition ]
  2. then 条件为真
  3. commands1 要执行代码块
  4. else 条件为假
  5. commands2 要执行的代码块
  6. fi 结束

12-shell流程控制-if判断语句 - 图2
该语句翻译成汉语大意如下:

  1. 假如条件为真
  2. 那么
  3. 执行commands1代码块
  4. 否则
  5. 执行commands2代码块
  6. 结束

通过一段代码演示一下吧,判断当前登录用户是管理员还是普通用户,如果是管理员输出”hey admin“ 如果是普通用户输出”hey guest“

  1. #!/bin/bash
  2. #Author:www.zutuanxue.com
  3. #Created Time:
  4. #Script Description:
  5. if [ $USER == 'root' ]
  6. then
  7. echo "hey admin"
  8. else
  9. echo "hey guest"
  10. fi

四、if…elif…else

适用范围:多于两个以上的判断结果,也就是多于一个以上的判断条件。

  1. if [ condition 1] 满足第一个条件
  2. then
  3. command1 执行command1代码块
  4. elif [ condition 2] 满足第二个条件
  5. then
  6. commands2 执行command2代码块
  7. .......
  8. else 如果条件都不满足
  9. commandsX 执行commandX代码块
  10. fi 结束判断

12-shell流程控制-if判断语句 - 图3
该语句翻译成汉语大意如下:

  1. 假如 条件1 为真
  2. 那么
  3. 执行代码块1
  4. 假如 条件2 为真
  5. 那么
  6. 执行代码块2
  7. 以此类推的N个条件及对应的执行代码块
  8. 否则 【以上所有条件中没有一个满足的】
  9. 执行代码块X
  10. 结束

通过一段代码演示一下吧,通过一个脚本,判断两个整数的关系
案例需求
判断内存的使用率
60以下 ok
60以上 黄色警告
70以上 橙色严重警告
80以上 红色警告
案例思考

  • 内存使用率获得方式
    – 手动给出
    – 通过内存查看命令运算得出

案例代码

  1. #!/bin/bash
  2. #1、条件
  3. #判断内存的使用率
  4. #60以下 ok 绿色 32m
  5. #60以上 黄色警告 33m
  6. #70以上 粉色严重警告 35m
  7. #80以上 红色警告 31m
  8. #2、算法
  9. #收集内存使用率 $1
  10. #
  11. #多条件判断
  12. if [ $1 -gt 80 ]
  13. then
  14. echo -e "\033[31m 警告 \033[0m"
  15. elif [ $1 -gt 70 ]
  16. then
  17. echo -e "\033[35m 警告 \033[0m"
  18. elif [ $1 -gt 60 ]
  19. then
  20. echo -e "\033[33m 警告 \033[0m"
  21. else
  22. echo -e "\033[32m OK \033[0m"
  23. fi
  24. #注意事项
  25. #多条件判断 需要从最严格开始判断 否者 后面的就不会生效
  26. #如果你第一个判断的是60以上,那么 70 80 都符合第一个条件。所以后面的判断70 80 就没有任何意义

五、练习案例

案例需求
比较两个整数的关系
案例思考

  • 两个整数有几种关系
    – 大于
    – 等于
    – 小于

案例代码

  1. #!/bin/bash
  2. #Author: www.zutuanxue.com
  3. #Created Time:
  4. #Script Description:
  5. if [ $1 -gt $2 ]
  6. then
  7. echo "$1 > $2"
  8. elif [ $1 -eq $2 ]
  9. then
  10. echo "$1 = $2"
  11. else
  12. echo "$1 < $2"
  13. fi

六、if嵌套if

当有多步判断的时候,可以使用if嵌套
1、多步判断 类似于多条件if
2、依赖执行的环境 configure->make->make install

6.1、使用if嵌套if的方式判断两个整数的关系

  1. #!/bin/bash
  2. #Author:
  3. #Created Time:
  4. #Script Description:
  5. if [ $1 -ne $2 ]
  6. then
  7. if [ $1 -gt $2 ]
  8. then
  9. echo " $1 > $2 "
  10. else
  11. echo " $1 < $2 "
  12. fi
  13. else
  14. echo " $1 = $2 "
  15. fi

6.2、写一个nginx安装初始化脚本

案例需求
写一个nginx业务初始化脚本,完成nginx软件自动安装。
案例思考

  • 1、nginx软件包获得方式
  • 2、nginx安装流程
  • 3、nginx安装依赖关系

案例步骤

  • 1、软件包下载
  • 2、软件包解压
  • 3、安装依赖包
  • 4、安装nginx
  • 5、返回结果

案例代码

  1. #!/bin/bash
  2. #Author: www.zutuanxue.com
  3. #Created Time:
  4. #Script Description: nginx aoto install script
  5. source_pkg=nginx-1.19.2.tar.gz
  6. #1、软件包下载
  7. wget http://nginx.org/download/$source_pkg
  8. #2、解压
  9. if [ -f $source_pkg ];then
  10. tar xf $source_pkg && cd nginx-1.19.2
  11. else
  12. echo "not found $source_pkg"
  13. exit 1
  14. fi
  15. #3、安装依赖包
  16. if ! ( yum -y install pcre-devel zlib-devel );then
  17. echo "yum: install soft error"
  18. exit 1
  19. fi
  20. #4、配置
  21. #判断配置语句执行结果
  22. if ./configure 1>/dev/null
  23. then
  24. #判断make执行结果
  25. if make 1>/dev/null
  26. then
  27. #判断make install安装结果
  28. if make install 1>/dev/null
  29. then
  30. echo "nginx 安装成功"
  31. else
  32. echo "nginx 安装失败"
  33. exit 1
  34. fi
  35. else
  36. echo "make fail"
  37. exit 1
  38. fi
  39. else
  40. echo "configure fail"
  41. exit 1
  42. fi
  43. #./configure
  44. #if [ $? -eq 0 ];then
  45. #注意: 1>/dev/null
  46. 1 标准输出
  47. 2 标准错误输出

七、if高级用法

7.1、条件符号使用双圆括号,可以在条件中植入数学表达式 if (())

#!/bin/bash#Author:#Created Time:#Script Description: if (( (5+5-5)*5/5 > 10 )) then echo "yes"else echo "no"fi

7.2、使用双方括号,可以在条件中使用通配符

通过代码看下 ,为字符串提供高级功能,模式匹配 r 匹配r开头的字符串
`#!/bin/bash#Author: #Created Time: #Script Description: for var in ab ac rx bx rvv vt do if [[ “$var” == r
]] then echo “$var” fi done`

八、简写if

省去了关键字,条件为真采用&&符号链接命令块,条件为假采用||链接命令块
简写if一般用在简单的判断中
if [ ! -d /tmp/baism ] then mkdir /tmp/baism fi 可以简写为 [ ! -d /tmp/baism ] && mkdir /tmp/baism if [ $USER == 'root' ] then echo "hello root"else echo "hello guest"fi 可以简写 [ $USER == 'root' ]&&echo "hello root" || echo "hello guest"

九、课后练习

  1. 1、计算机状态监控。能ping通就算up,不通为down,需要考虑网络延迟问题造成的假报警问题。
  2. #1、分别ping 取三个值 判断三个值的结果
  3. 1.1 ping 3 并取值
  4. 1.2 三次结果与运算 得出结论
  5. 2、监控一个服务端口,判断其状态
  6. 3、打印内存使用率脚本,打印内存使用率、swap使用率、buff&cache使用量
  7. 4、打印磁盘使用率脚本,对本机的磁盘使用率统计并打印结果
  8. 使用率小于80,绿色输出
  9. 使用率小于90,大于80,黄色输出
  10. 使用率小于95,大于90,红色输出
  11. 5、网卡发送和就收数据量监控,按秒统计。
  12. 6URL监控脚本,对某个URL进行监控,返回值为200则代表成功访问。
  13. 7、写一个mysql binlog备份脚本,要求每天00分,计算机自动备份前一天的binlog日志,打包后发送给备份服务器。
  14. 8、闰年判断
  15. 9、判断/tmp/run目录是否存在,如果不存在就建立,如果存在就删除目录里所有文件
  16. 10、写一个nginx安装脚本