Shell条件语句(条件测试、if语句、case语句)
一.条件语句
条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。
测试过程,实现评估布尔声明,以便用在条件性环境下进行执行
- 若真,则状态码变量 $? 返回0
- 若假,则状态码变量 $? 返回1
1.test命令测试条件表达式
格式1:test [操作符选项] 条件表达式
格式2:[ 操作符 条件表达式 ]
常见的测试操作符 | 含义 |
---|---|
-d | 测试是否为目录(directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-L | 测试是否为软连接文件 |
-nt | 判断文件A是否比文件B新 |
-ot | 判断文件A是否比文件B旧 |
-ef | 判断两个文件是否为同一文件 |
示例1:test [操作符选项] 条件表达式
示例2:[ 操作符 条件表达式 ]
2.整数数值比较
格式:
[ 整数1 操作符 整数2 ]
常见测试操作符:
操作符 | 含义 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-lt | 小于(Leser Than) |
-gt | 大于(Greater Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
示例1:比较两个整数大小
示例2:查询当前目录下的文件数是否大于10,如果大于,则进行提示
示例3: 查看系统内存是否低于1024M,如果低于则提示
3.字符串比较
格式: [ "字符串1" = "字符串2" ] #判断是否相等 [ "字符串1" != "字符串2" ] #判断是否不等 [ -z "字符串" ] #判断字符串内容是否为空 [ -n "字符串" ] #判断字符是否存在
示例:
4.逻辑测试(短路运算)
格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
常见条件
- -a或&&:逻辑与,“而且”的意思全真才为真
- -o或||:逻辑或,“或者”的意思一真即为真
- !:逻辑否
[ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] 等同于 [[ 表达式1 && 表达式2 ]] [ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] 等同于 [[ 表达式1 || 表达式2 ]]
三元运算符
[ 表达式 ] && a || b
当条件表达式为真时,取a值;当条件表达式为假时,取b值
二.if语句
1.单分支结构
如果只有一个判断式要进行,那么我们可以使用单分支的if语句
格式: if [ 条件判断式 ]; then #当条件判断成立时,可以进行的命令工作内容 fi #这里将if反过来写,结束if语句的意思
2.双分支结构
格式: if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi
3.多分支结构
格式: if [ 条件判断式 ]; then 当条件判断成立时,可以进行的命令工作内容 elif [ 条件判断式二 ]; then 当条件判断成立时,可以进行的命令工作内容 else 当上面的条件判断都不成立时,可以进行的命令工作内容 fi
三.case语句
格式: case 变量名称 in “第一个变量内容” 程序段 ;; “第二个变量内容” 程序段 ;; *) 不包含第一个变量内容与第二个变量内容的其他程序执行段 默认程序段 ;; esac
注意点:
- case行首必须以单词“in”,每一模式必须以单个右括号")"结束
- 双分号";;"表示命令序列的结束
- 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b
- 最后的)表示默认模式,其中的相当于通配符
四.if语句和case语句脚本小仓库
1.字符识别输入数字or字母(case
#!/bin/bash read -p "请在此处输入:" key case $key in [0-9]) echo "你输入的是 数字" ;; [a-z]|[A-Z]) echo "你输入的是 字母" ;; *) echo "输入有误" bash $0 esac
2.分数等级分类(if
#!/bin/bash #积分分类 read -p "请输入积分(0-100):" JF if [ $JF -ge 90 ];then echo '优' elif [ $JF -lt 90 ];then echo '差' fi
3.测试机器是否在线(for、if
#!/bin/bash for i in {1..254} do { ping -c2 -w2 192.168.91.$i &>/dev/null if [ $? -eq 0 ] then echo host $i is online echo "$i" >> host.txt else echo "host $i is offline" fi }& done wait
4.猜价格小游戏(while、if
#!/bin/bash p=`echo $[RANDOM%1000+1]` time=0 while true do let time++ read -p "请输入您猜测的价格(1-1000):" h if [ $h -eq $p ] then echo "恭喜您猜中了,您一共猜测了$time次" exit elif [ $h -gt $p ] then echo "您猜测的价格过高" else echo "您猜测的价格过低" fi done
5.检查文件是否存在且有执行权限(if
#!/bin/bash #检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权 cd /root test -f test.sh if [ $? -eq 0 ];then test -x test.sh if [ $?-eq 0 ];then echo "有test.sh文件且可执行" else echo "有test.sh文件但不可执行" fi else echo "没有test.sh文件" fi
6.赛跑选拔并分组(if
#!/bin/bash #提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛, #大于10秒的都淘汰,如果输入其它字符则提示重新输入; #进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误 read -p "请输入您100米赛跑的秒数:" sec if [ $sec -gt 0 ] && [ $sec -le 10 ];then read -p "请输入您的性别(男|女):" sex if [ $sex = "男" ] || [ $sex = "女" ];then if [ $sex == "男" ];then echo "恭喜进入选拔赛男生组" elif [ $sex == "女" ];then echo "恭喜进入选拔赛女生组" fi else echo "输入错误,请重新输入" fi else echo "很遗憾,您被淘汰了" fi
7.解压压缩包(case
#!/bin/bash #用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录 read -p "请输入你要解压的文件:" file case $file in *.tar.bz2) echo "正在解压bz2文件至opt目录中....." tar -xvf $file -C /opt ;; *.tar.gz) echo "正在解压gz文件至opt目录中....." tar -xvf $file -C /opt ;; *) echo "文件格式有误,请重新输入文件" ;; esac
8.判断奇数偶数(if
方法一: #!/bin/bash read -p "请输入一个数字:" num let i=$num+1 if [ $? -eq 0 ];then echo "你输入的是整数" let rst=$num%2 if [ $rst -eq 0 ];then echo "你输入的是偶数" else echo "你输入的是奇数" fi else echo "你输入的不是整数" fi 方法二: #!/bin/bash #判断输入的内容是奇数还是偶数 read -p "请输入一个数字:" num let n=$num+1 if [ $? -eq 0 ];then echo "你输入的是整数" if [ $[ $num % 2 ] -eq 0 ];then echo "你输入的是偶数" else echo "你输入的是奇数" fi else echo "你输入的不是整数" fi
到此这篇关于Shell条件语句(条件测试、if语句、case语句)的文章就介绍到这了,更多相关Shell条件语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
linux 比较两个文件夹diff不同 (diff命令, md5列表)
这篇文章主要介绍了linux 比较两个文件夹diff不同 (diff命令, md5列表),比较文件夹diff,可以直接使用diff命令,也可以比较文件md5列表,下面通过实例给大家介绍下,感兴趣的朋友跟随脚本之家小编一起学习吧2018-05-05
最新评论