自动化运维必须要学的Shell脚本之——条件语句的详细解读
Posted 码海小虾米_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维必须要学的Shell脚本之——条件语句的详细解读相关的知识,希望对你有一定的参考价值。
1.test命令
测试表达式是否成立,若成立返回0,否则返回其他数值。
格式1: test 条件表达式
格式2: [ 条件表达式 ]
实例:比较整数的大小是否正确
实例:判断目录是否存在
test模块提供了在if-then语句中测试不同条件的途径,如果test命令中列出的条件成立,test命令就会退出并返回状态码0,这样if-then语句就与其他编程语言中的if-then语句以类似的方式工作了,如果条件不成立,test命令就会退出并返回非零的退出状态码,这使得if-then语句不会再被执行。
test命令的格式非常简单:test 表达式
表达式是test命令要测试的一系列参数和值,在if-then语句中,test命令看起来是这样的:
if test 表达式
then
命令
fi
如果不写test命令的表达式部分,它会以非零的退出状态码退出,并执行else语句块
当我们加入一个条件的时候,test命令会测试该条件,这里我门加入一个变量var,并使用test判断变量中是否有内容。
2.文件测试
1.格式:操作符 文件名或者目录名
2.常用的测试操作符
- -d∶ 测试是否为目录(Directory)
- -e∶ 测试目录或文件是否存在(Exist)
- -f∶ 测试是否为文件(File)
- -r∶ 测试当前用户是否有权限读取(Read)
- -w∶ 测试当前用户是否有权限写入(Write)
- -x∶测试当前用户是否有权限执行(eXcute)
- -L∶测试是否为软链接文件
实例:常用的测试操作符
3.整数值比较
1.格式:[ 整数1 操作符 整数2 ]
2.常用的测试操作符
- -eq∶ 等于(Equal)
- -ne∶ 不等于(Not Equal)
- -gt∶ 大于(Greater Than)
- -It∶ 小于(Lesser Than)
- -le∶ 小于或等于(Lesser orEqual)·
- -ge∶ 大于或等于(Greateror Equal)
实例:查询当前目录下的文件数是否大于10,如果大于,则进行提示。
实例:查看系统内存是否低于1024M,如果低于则提示。
4. 字符串比较
1.格式:
[ 字符串1 = 字符串2 ] #判断是否相等
[ 字符串1 != 字符串2 ] #判断是否不等
2.常用的测试操作符
- =∶ 字符串内容相同
- !=∶ 字符串内容不同,!号表示相反的意思
- z∶字符串内容为空
实例:判断当前系统语言环境是否为“us.en”,如果不是则提示。
实例:测试用户输入的是否为yes,如果是的话,则进行文件覆盖(这里仅代表输出问文本覆盖,并不是实际操作,实际操作需要写执行命令)
5. 逻辑测试
1.格式:
格式1∶ [ 表达式1 ] 操作符 [ 表达式2 ]…
格式2∶ 命令1 操作符 命令2…
2.常用的测试操作符
- -a或&&∶ 逻辑与,"而且"的意思
- -o或∶ 逻辑或,"或者"的意思
- !∶逻辑否
6. if语句
6.1 单分支结构
如果只有一个判断式要进行,那么我们可以使用单分支的if语句
1.格式:
if [ 条件判断式 ]; than
当条件判断成立时,可以进行的命令工作内容
fi #这里将if反过来写,结束if语句的意思
2.原理图:
实例:使用单分支if语句判断test文件是否存在
6.2 双分支结构
在同一个数据的判断中,如果该数据需要进行两种不同的判断,我们就需要双分支if语句了:
1.格式:
if [ 条件判断式 ]; than
当条件判断成立时,可以进行的命令工作内容
else
当条件判断不成立时,可以进行的命令工作内容
fi
2.原理图:
实例:判断用户输入的是否为yes
6.3 多分支结构
如果数据需要进行多种不同的判断,则可以使用多分支结构
1.格式:
if [ 条件判断式 ]; than
当条件判断成立时,可以进行的命令工作内容
elif [ 条件判断式二 ]; than
当条件判断成立时,可以进行的命令工作内容
else
当上面的条件判断都不成立时,可以进行的命令工作内容
fi
2.原理图:
实例:判断用户输入的为yes还是no,或者是其他错误情况。
7. case语句结构
1.格式:
case 变量名称 in
“第一个变量内容”
程序段
;;
“第二个变量内容”
程序段
;;
*)
不包含第一个变量内容与第二个变量内容的其他程序执行段
默认程序段
;;
esac
案例:判断用户掌握哪一种编程语言。
以上是关于自动化运维必须要学的Shell脚本之——条件语句的详细解读的主要内容,如果未能解决你的问题,请参考以下文章
自动化运维必须要学的Shell脚本之——编程规范和变量详细解读
自动化运维必须要学的Shell脚本之——免交互操作,分分钟解放双手!