Shell编程之条件语句

Posted Zmac111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell编程之条件语句相关的知识,希望对你有一定的参考价值。

一、条件测试操作

测试命令—test
可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立,反之不成立)

格式1:test 条件表达式
格式2:[ 条件表达式 ]   注:中括号这里一定要有空格

二、文件测试

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

常用的测试操作符

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

注: -d 和 -f 还能判断目录或文件是否存在
文件测试
符号链接
符号

三、整数值比较

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

常用的测试操作符

操作符说明
-eq等于
-ne不等于大于
-gt大于
-lt小于
-le小于等于
-ge大于等于

举例1
当前登录用户数小于等于5,输出“还行”
还可以

实例2
Mem的空余内存与100M比较,小于就输出警告当前内存不足,内存为多少兆。
内存

四、字符串比较

(1)字符串可用来查看用户输入、系统环境等是否满足条件
(2)交互式操作的shell脚本中,用来判断用户输入的位置参数是否符合要求

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

格式2:
[  -z  字符串 ]		-检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
[  -n  字符串 ]		-检查字符串是否存在

常用的测试操作符

操作符说明
=第一个字符串与第二个字符串相同
!=第一个字符与第二个字符串不相同,“!”表示取反
-z字符串内容为空
-n判断是否有字符串存在

实操

给ACK赋值,一开始不给值,进行测试,查看输出结果。
然后给它赋值yes,进行测试,查看输出结果。
字符串

五、逻辑测试

用于判断两个或多个条件之间的依赖关系

常用的操作符:
-a或&& :逻辑与,“而且”的意思,前后条件需都成立
-o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立
! :逻辑否,“不”的意思

格式1:[  表达式1  ]  操作符  [  表达式2  ]  
格式2:命令1  操作符  命令2

实操1
逻辑或的实例
逻辑1

实操2

vim ping.sh
#!/bin/bash
ping -c 3 -i 0.5 -W 2 $1 &> /dev/null && echo "$1 is online" || echo "$1 is offline"

-c:发送包的个数
-i:发送包的间隔时间
-W:超时时间
-w:多少秒后停止 ping 命令操作

逻辑2
逻辑3

六、if语句

1.单分支结构

只有在条件成立的时候才会执行相应的操作,否则不执行。
单分支图

格式:
if 条件测试操作
then
命令序列
fi

举例(三种表达方式)
第一种:正常的if语句格式,看起来整洁,若报错,提示行数容易发现。(推荐使用)
if [ 3 -gt 2 ]
then
echo “ok”
fi

第二种:都集中在一行,用“;”隔开,报错不易发现。
if [ 3 -gt 2 ]; then echo “ok”; fi

第三种:由条件测试拼凑而。
[ 3 -gt 2 ] && echo “ok”

实操
单支1

2.双分支结构

针对两种情况执行不同的操作
双分支结构

格式:
if 条件测试操作
then
命令序列 1
else
命令序列 2
fi

举例
查看80 端口是否在监听,如果在,输出网站服务已经在运行,反之,启动httpd服务。
双1
双2

3.多分支结构

针对if的特性,嵌套使用,进行多次判断。
多支

格式:
if 条件测试操作 1
then
命令序列 1
elif 条件测试操作 2
then
命令序列 2
[else]
[命令序列 3]
fi

举例
考试成绩100分为优秀;90 到99分,抄写10遍;70 到89分,抄写20遍;60到69分,抄写30遍;0到59分,全部抄写30遍。输入其他值,显示输入有误。
多支1
多支2

七、case语句结构

用于变量存在多种取值,对每种取值执行不同的命令。
case图

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

举例
考试成绩100分为优秀;90 到99分,抄写10遍;70 到89分,抄写20遍;60到69分,抄写30遍;0到59分,抄写40遍。输入其他值,显示输入有误。

第一种方法

case1
case2
第二种方法(采用通配符)

通1
通2

总结

掌握
(1)条件测试的语法(文件测试、整数值比较、字符串比较、逻辑测试)
(2)if条件语句(单分支、双分支、多分支)
(3)case语句的用法,及通配符的应用

以上是关于Shell编程之条件语句的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程之条件语句——if语句case语句

if语句 条件测试 shell编程之条件语句

Shell编程之条件语句

shell if 语句

Shell编程Shell中的流程控制之if语句

shell编程之条件语句