Shell的条件测试与条件语句


一.条件测试

1.test命令

  • 测试表达式是否成立,若成立返回0,否则返回其他数值

格式:

  1. test 条件表达式
  2. [ 条件表达式 ]
    在这里插入图片描述

2.文件测试

格式
[操作符 文件或目录]

常用的测试操作符

  • -d:测试是否为目录
  • -e:测试目录或文件是否存在
  • -f:测试是否为文件
  • -r:测试当前用户是否有权限读取
  • -w:测试当前用户是否有权限写入
  • -x:测试当前用户是否有权限执行
    在这里插入图片描述

3. 整数值比较

格式:
[整数1 操作符 整数2]

常用的测试操作符

  • -eq:等于
  • -ne:不等于
  • -gt:大于
  • -lt:小于
  • -le:小于或等于
  • -ge:大于或等于

在这里插入图片描述

ack用法

在这里插入图片描述

4.字符串比较

格式1[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]

格式2[ -z 字符串 ]
常用的测试操作符
  • =:字符串内容相同
  • !=:字符串内容不同,!号表示相反的意思
  • -z:字符串内容为空
  • -n:字符串有内容
    在这里插入图片描述

5.逻辑测试

格式1[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
常用的操作符
-a或&& 逻辑与,"而且"的意思,前后条件需都成立
-o或▕▕ 逻辑或,“或者”的意思,只需前后条件中一个成立
逻辑否的意思
例如:
a=5
[ $a -ne 1 ] && [ $a != 2 ] 等同于 [ $a -ne 1 -a $a != 2 ]

在这里插入图片描述
&&、||操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错
例如:
在这里插入图片描述

二.条件语句

(一)if语句

1.单分支结构

if 条件测试操作            if 已用磁盘空间>80%
   then 命令序列              then 报警
fi                       fi

在这里插入图片描述

if语句的三种表达方式

方法1[root@localhost ~]# if [ 3 -ne 2 ]
> then
> echo "yes"
> fi
yes

方法2if [ 3 -ne 2 ]; then echo "yes"; fi

方法3[ 3 -ne 2 ] && echo "yes"

在这里插入图片描述

2.双分支结构

if 条件测试操作                   if 80端口是否在监听
   then                            then  
   命令序列 1         ➡➡➡            网站服务已在运行        
   else              ➡➡➡               else
   命令序列 2                       启动httpd服务
fi                              fi

3.多分支结构

if 条件测试操作                if 分数85-100之间
   then                         then 
   命令序列1                      判为优秀
elif                         elif
条件测试操作2                分数在70-84之间
   then                          then
   命令序列2                       判为合格
else                          else
命令序列3                      判为不合格
fi                            fi

在这里插入图片描述
例题:
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误

read -p "输入100米赛跑的秒数:" math

if [ "$math" -gt 0 -a "$math" -le 10 ]
then
  echo "恭喜你进入选拔赛! "

elif [ "$math" -gt 10 ]
    then
    echo "不好意思,你已被淘汰! "

else
   echo "输入有误,请重新输入! "
fi

read -p "请输入你的性别:" sex
if [ "$sex" = '男' ]
then
   echo "恭喜你进入男子组! "

elif [ "$sex" = '女' ]
   then
   echo "恭喜你进入女子组! "

else
   echo "输入错误,请重新输入! "

fi

在这里插入图片描述
在这里插入图片描述

(二)case语句结构

case多分支结构

case 变量值 in 
模式一)
   命令序列
;;
模式二)
   命令序列 
;;
……
*)
   默认命令序列
esac
case语句注意事项

1.case行首必须以单词“in”,每一模式必须以单个右括号")"结束
2.双分号";;"表示命令序列的结束
3.模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b

最后的*)表示默认模式,其中的*相当于通配符

例题:
提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误

#!/bin/bash
read -p "输入100米赛跑的秒数:" s
case $s in
[1-9][1-9]|100)
   echo "恭喜你已被淘汰"
;;

[0-9]|10 )
    echo "恭喜你进入选拔赛"
read -p "你的性别:" sex
case $sex in
男)
 echo "你已进入男子组"
;;)
 echo "你已进入女子组"
;;

*)
 echo "请重新输入"
esac
;;

*)
 echo "请重新输入"
esac

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53446039/article/details/114326426