Linux之shell脚本的条件语句
目录
一、测试
1.1测试
格式
[操作符 文件或目录]
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
1.2比较整数数值
格式
[整数1 操作符 整数2]
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
1.3字符串
格式
[ 字符串1 == 字符串2 ] 是否相同
[ 字符串1 != 字符串2 ] 是否不相同
[ -z 字符串 ] 是否为空
[ -n 字符串 ] 字符是否存在
==:字符串内容相同
!=:字符串内容不同,! 号表示相反的意思
-z:字符串内容为空
-n: 字符是否存在
1.4逻辑测试
格式
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]...
格式2:命令1 操作符 命令2 ...
常见条件
-a 或 &&:逻辑与,“而且”的意思全真才为真
-o 或 ||:逻辑或,“或者”的意思一真即为真
!:逻辑否
且 与
第一个要真 第二个也为真才能是真
如果第一个为假,整个为假不用执行下个操作
[`id -u` -eqo ]&&
echo "该用户为超级管理员"
或
一真即为真
如果第一个为真 那么不用执行第二个
第二个为假 才需要执行第二个
1.5双中括号[[]]
格式
[[ expression ]] 用法
== 左侧字符串是否和右侧的PATTERN相同
注意:此表达式用于[[ ]]中,PATTERN为通配符
=~ 左侧字符串是否能够被右侧的正则表达式的PATTERN所匹配
注意: 此表达式用于[[ ]]中;扩展的正则表达式
1.6() {}
格式
(CMD1;CMD2;...)和 {空格CMD1;CMD2;...; } 都可以将多个命令组合在一起,批量执行
二、if语句
2.1分支结构
2.1.1单分支
单分支
if 判断条件;
then 条件为真的分支代码
fi
2.1.2双分支
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
2.1.3多分支
多分支
if 判断条件1
then
条件1为真的分支代码
elif 判断条件2
then
条件2为真的分支代码
elif 判断条件3;then
条件3为真的分支代码
...
else
以上条件都为假的分支代码
fi #结束标志
2.2case
格式
case $input in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默认分支
;;
esac #表示case语句块的结束
2.3echo
echo -n 表示不换行输出
echo -e 表示输出转义符
常用的转义符