shell编程之条件语句

185 阅读1分钟

条件测试操作

test命令

可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为0表示条件成立)

格式一:test 条件表达式
格式二:[ 条件表达式 ]    ##方括号"[]"与条件表达式之间需要至少一个空格进行隔离

文件测试

格式一:test 操作符 表达式
格式二:[ 操作符 文件或目录 ]

常用的操作符

测试操作符说明
-e测试目录或文件是否存在(Exist)
-d测试是否为目录(Directory)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否有执行权限(Excute)
-L测试是否为软链接
实际操作:

Snipaste_2022-08-24_15-45-47.png

整数值判断

格式:[ 整数/变量 操作符 整数/变量2 ]

常用的测试操作符
测试操作符说明符号
-eq等于(Equal)==
-ne不等于(Not Equal)!=
-gt大于(Greater Than)>
-lt小于(Lesser Than)<
-le小于或者等于(Lesser or Equal)=<
-ge大于或者等于(Greater or Equal)=>
实际操作:

Snipaste_2022-08-24_15-49-10.png

查看当前文件数量是否大于10,如果大于进行提示

[root@localhost ~]#[ `ls |wc -l` -gt 10 ] && echo "文件数量大于10"
文件数量大于10

Snipaste_2022-08-24_15-53-38.png

字符串比较

格式一:
[ "字符串1" = "字符串2" ][ "字符串1" == "字符串2" ]
[ "字符串1" != "字符串2" ]      #有数字最好用引号引用
格式二:
[ -z "字符串" ]    #检查字符串是否为空Zero,对于未定义或赋予空值的变量将视为空串
[ -n "字符串" ]    #检查是否有字符串存在
实际操作:

Snipaste_2022-08-24_17-12-12.png

逻辑测试

格式一:
[ 表达式 ] 操作符 [ 表达式2 ]
格式二:
命令1  操作符 命令2
常用的测试操作符
测试操作符说明
-a或者&&逻辑与,“而且”的意思
-o或ll逻辑或,“或者”的意思
逻辑否
实际操作:
Snipaste_2022-08-24_16-02-10.png Snipaste_2022-08-24_16-04-31.png

三元运算符

1、java,C语言

  • 条件表达式?值1:值2
  • 当条件表达式为真时,取值1;当条件表达式为假时,取值2

2、shell

  • [ 表达式 ] && 值1 || 值2
  • 当表达式为真时,取值1;当表达式为假时,取值2
实操:

查看指定主机是否在线

Snipaste_2022-08-24_18-50-53.png

Snipaste_2022-08-24_18-52-58.png

if语句的结构

单分支结构

if 条件测试推荐
  then  命令系列
fi

Snipaste_2022-08-24_11-02-51.png

实操:

判断已用磁盘空间是否大于5%,如果是就报警提示

Snipaste_2022-08-24_16-13-35.png

awk '{print $n}' 将所在行的信息的第n个字符串显示出来

awk -F -F 指定分隔符为空格

双分支结构

if 条件测试推荐
  then  命令系列1
  else  命令系列2
fi

Snipaste_2022-08-24_11-58-44.png

实操:

检测80端口是否在监听,如果是,则提示”网站服务已在运行“;如果否,则启动httpd服务

Snipaste_2022-08-24_16-23-10.png Snipaste_2022-08-24_16-24-42.png

多分支结构

if 条件测试推荐
  then  命令系列1
elif 条件测试操作2
  then  命令系列2
 else命令系列3
fi

Snipaste_2022-08-24_13-46-39.png

实操:

学生考试成绩判断,100分你太棒了,90-99分优秀,70-89良好,60-69分及格,0-59分不及格,其余划成输入错误

Snipaste_2022-08-24_16-45-54.png Snipaste_2022-08-24_16-46-56.png

case语句结构

case多分只结构

case 变量值 in
模式1)
  命令序列1
  ;;
模式2)
  命令序列2
  ;;
  ......
*)
默认命令序列
esac    

Snipaste_2022-08-24_15-35-29.png

case支持的通配符:
*  任意长度的任意字符
?  任意单个字符
[] 指定范围内的任意单个字符
|  或,或者(例:a|b
实操:

学生考试成绩判断,100分你太棒了,90-99分优秀,70-89良好,60-69分及格,0-59分不及格,其余划成输入错误

Snipaste_2022-08-24_17-06-44.png Snipaste_2022-08-24_17-06-17.png