shell脚本之条件语句

人生处万类,知识最为贤。这篇文章主要讲述shell脚本之条件语句相关的知识,希望能为你提供帮助。
一、条件测试操作 1、测试命令------test

  • 可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立,反之不成立)。
使用test命令测试时,有两种形式:(常用格式二) 格式一:test 条件表达式 格式二:[ 条件表达式 ] #方括号两边与条件表达式之间需要至少一个空格进行分隔

2、文件测试
  • 根据给的路径名称,判断对应的是文件还是目录,或者判断是否有相应的权限等。
格式:[ 操作符 文件或目录 ]

常用的操作符 作用
-d 测试是否为目录(Directory)
-e 测试目录或文件是否存在(Exist)
-f 测试是否为文件(File)
-r 测试当前用户是否有权限读取(Read)
-w 测试当前用户是否有权限写入(Write)
-x 测试当前用户是否有权限执行(Excute)
shell脚本之条件语句

文章图片

shell脚本之条件语句

文章图片

3、整数值比较
  • 用于比较两个整数值的大小。
格式:[ 整数变量1 操作符 整数变量2 ]

常用的操作符 作用 符号
-eq 等于 ==
-ne 不等于 !=
-gt 大于 >
-lt 小于 <
-le 小于等于
-ge 大于等于
示例一:
ps aux |wc -l [ $(ps aux| wc -l) -lt 200 ] & & echo "系统进程状况良好" || echo "后台程序太多,请及时清理"

shell脚本之条件语句

文章图片

示例二:
Free=$(free -m | grep "Mem" | awk print $4) [ $Free -lt 1024 ] & & echo "空闲内存所剩不多,只剩下$FreeMB"

shell脚本之条件语句

文章图片

4、字符串比较
  • 字符串可用来查看用户输入、系统环境等是否满足条件
  • 交互式操作的shell脚本中,用来判断用户输入的位置参数是否符合要求
常用选项 作用
= 第一个字符串与第二个字符串相同
!= 第一个字符与第二个字符串不相同,“!”表示取反
-z 字符串内容为空
格式1: [字符串1=字符串2 ] 或 [字符串1==字符串2 ] [字符串1!=字符串2 ]格式2: [-z字符串 ]#检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串

【shell脚本之条件语句】
shell脚本之条件语句

文章图片

5、逻辑测试
  • 用于判断两个或多个条件之间的依赖关系
常用的操作符: -a或& & :逻辑与,“而且”的意思,前后条件需都成立 -o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立 ! :逻辑否,“不”的意思格式1:[表达式1]操作符[表达式2] 格式2:命令1操作符命令2

示例: a=5 [ $a -ne 1 ] & & [ $a != 2 ] 等同于 [ $a -ne 1 -a $a != 2 ]#、& & 、||操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错 [[ $a -ne 1 & & $a != 2 ]] [ 2 -lt 3 ] & & echo true || echo false [ 2 -ge 3 ] & & echo true || echo false

shell脚本之条件语句

文章图片

shell脚本之条件语句

文章图片

小实验: vim pinghost.sh #!/bin/bash ping -c 3 -i 0.5 -W 2 $1 & > /dev/null & & echo "$1 online" || echo "$1 off"-c:发送包的个数 -i:发送包的间隔时间 -W:超时时间 -w:多少秒后停止 ping 命令操作

shell脚本之条件语句

文章图片

shell脚本之条件语句

文章图片

二、if语句 1、单分支结构
  • 只有在条件成立的时候才会执行相应的操作,否则不执行。
格式: if 条件测试操作 then 命令序列 fi

shell脚本之条件语句

文章图片

演示1:正常的if语句格式,看起来整洁,一目了然,如果报错提示行数容易发现。(推荐使用) if [ 3 -gt 2 ] then echo "ok" fi演示2:都集中在一行,用“;”隔开,报错不易发现。(如果你认为自己不会出错,可以试试) if [ 3 -gt 2 ]; then echo "ok"; fi演示3:由条件测试拼凑而。(同2) [ 3 -gt 2 ] & & echo "ok"

shell脚本之条件语句

文章图片

2、双分支 if 语句
  • 针对两种情况执行不同的操作
格式: if 条件测试操作 then 命令序列 1 else 命令序列 2 fi

shell脚本之条件语句

文章图片

这里就拿刚才上面逻辑测试里确定做成一个 vim pinghost.sh #!/bin/bash ping -c 3 -i 0.5 -W 2 $1 & > /dev/null if [ $? -eq 0 ] then echo "$1 online" else echo "$1 off" fi

shell脚本之条件语句

文章图片

shell脚本之条件语句

文章图片

3、多分支 if 语句
  • 针对if的特性,嵌套使用,进行多次判断。
格式: if 条件测试操作 1 then 命令序列 1 elif 条件测试操作 2 then 命令序列 2 [else] [命令序列 3] fi

shell脚本之条件语句

文章图片

vim dan.sh #!/bin/bash # read -p "请输入您的积分: " score if [ $score -ge 6000 ] then echo "您在本店是至尊VIP!买东西享5折优惠!" elif [ $score -ge 4000 ] & & [ $score -le 5999 ] then echo "您在本店是顶级VIP!买东西享7折优惠!"elif [ $score -ge 2000 ] & & [ $score -le 3999 ] then echo "您在本店为高级VIP!买东西享8折优惠!"elif [ $score -ge 1 ] & & [ $score -le 1999 ] then echo "您在本店为普通VIP,买东西享9.5折优惠"elif [ $score -eq 0 ] then echo "您还未在本店购买过东西,没有任何优惠" fi

shell脚本之条件语句

文章图片

shell脚本之条件语句

文章图片

三、case分支语句 1、case语句的结构
  • 用于变量存在多种取值,对每种取值执行不同的命令
  • 与if相似
case 变量值 in 模式 1) 命令序列 1 ; ; 模式 2) 命令序列 2 ; ; * ) 默认命令序列 esac

使用case分支语句时,有几个值得注意的特点如下所述
  • case行尾必须为单词" in" ,每一模式必须以右括号" )" 结束。
  • 双分号”; ; ”表示命令序列的结束。
  • 模式字符串中,可以用方括号表示一个连续的范围,如" [0-9]" ,还可以用竖杠符号" |“表示或,如" A|B”。
  • 最后的" )”表示默认模式,其中的 相当于通配符。
    shell脚本之条件语句

    文章图片
2、应用实例
(1)输入分数,确定评价
vim score.sh #!/bin/bash # read -p "请输入您的分数(0-100): " score [[ $score -ge 85 & & $score -le 100 ]] & & a="great" [[ $score -ge 60 & & $score -lt 85 ]] & & a="standard" [[ $score -ge 0 & & $score -lt 60 ]] & & a="false" case $a in great) echo "$score 分,优秀!" ; ; standard) echo "$score 分,合格!" ; ; false) echo "$score 分,不合格!" ; ; *) echo "输入有误!" esac

shell脚本之条件语句

文章图片

shell脚本之条件语句

文章图片

(2)编写系统服务脚本
vim /etc/init.d/firewalld.sh #!/bin/bash # case $1 in start) echo "正在开启防火墙..." systemctl start firewalld.service if [ $? -eq 0 ] then echo "开启成功" else echo "开启失败" fi ; ; stop) echo "正在关闭防火墙..." systemctl stop firewalld.service if [ $? -eq 0 ] then echo "已关闭" else echo "关闭失败" fi ; ; restart) $0 stop $0 start ; ; status) echo "防火墙状态如下:" systemctl status firewalld.service ; ; * ) echo "脚本的用法: $0 start|stop|status|restart" esac

实验脚本:
shell脚本之条件语句

文章图片

测试脚本:
shell脚本之条件语句

文章图片


    推荐阅读