Shell条件语句的使用
条件语句
- Shell条件语句的使用
- 条件测试的语法
- 字符串测试表达式
- 整数二元比较操作符
- 逻辑操作符
- if的条件语句的语法
- if的嵌套
- case语句语法
条件测试的语法
语法1:test <测试表达式>
利用test命令进行条件测试表达式的方法。test命令与<测试表达式>之间至少有一个空格。
语法2:[ <测试表达式> ]
通过[](单中括号)进行条件测试表达式的方法,和test命令用法相同。[]的边界和内容之间至少有一个空格。
语法3:[[ <测试表达式> ]]
通过[[]](双中括号)进行条件测试表达式的方法,比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。
语法4:((<测试表达式>))
通过(())(双小括号)进行条件测试表达式的方法,一般用于if语句。(())(双小括号)两端不需要有空格。
test条件测试的简单语法及示例
test条件测试的语法格式为:test<测试表达式> 对于如下语句: test -f file && echo true || echo false
该语句表示如果file文件存在,则输出true,否则(||)输出false。这里的&&是并且的意思。test的-f参数用于测试文件是否为普通文件,test命令若执行成功(为真),则执行&&后面的命令,而||后面的命令是test命令执行失败之后(为假)所执行的命令。 test命令测试表达式的逻辑也可以用上述表达形式的一半逻辑(即仅有一个&&或||)来测试,示例如下。
test -f /tmp/test.txt && echo 1
#<==若表达式成功,则输出1。
test -f /tmp/test.txt || echo 0
#<==若表达式不成功,则输出0。
[](中括号)条件测试语法及示例
[]条件测试的语法格式为:[ <测试表达式> ],注意[]两边有空格
-f /tmp/ywx.txt ] && echo 1 || echo 0
如果/tmp/ywx.txt文件存在,则输出1,否则(||)输出0。这里的&&表示并且。[]的应用同test命令,若中括号里的命令执行成功(返回真),则执行&&后面的命令,否则执行||后面的命令。 []测试表达式的逻辑也可以用如下的语法来判断逻辑的表达式写法(test命令的用法也适合于此),即: [ -f /tmp/ywx.txt ] && echo 1 #<==若表达式成功,则输出1。 [ -f /tmp/ywx.txt ] || echo 0 #<==若表达式不成功,则输出0
-d(directory)目录
文件存在且为目录则位真,及测试表达式成立
-f(file)文件
文件存在且为普通文件则位真,及测试表达式成立
-e(exist)
文件存在则为真,及测试表达式成立。不区分文件或目录。
-r(read)文件
文件存在且有可读权限则为真,及测试表达式成立
-s(size)文件
文件存在且文件小大不为0则为真,及测试表达式成立
-w(write)文件
文件存在且有可写权限则为真,及测试表达式成立
-x(executable)文件
文件存在且有可执行权限则为真,及测试表达式成立
-L(link)文件
文件存在且为链接文件则为真,及测试表达式成立
f1 -nt f2, nt(newer than)
文件f1比文件f2新则为真,及测试表达式成立。根据文件的修改时间来计算
f1 -ot f2, ot(older than)
文件f1比文件f2旧则为真,及测试表达式成立。根据文件的修改时间来计算
字符串测试表达式
字符串测试表达式
字符串测试操作符的作用包括:比较两个字符串是否相同、测试字符串的长度是否为零、字符串是否为NULL等
-n "字符串"
若字符串长度不为0,则为真,及测试表达式成立,n(no zero)
-z "字符串"
若字符串长度为0,则为真,及测试表达式成立,z(zero)
"字符串1" = "字符串2"
若字符串1等于字符串2,则为真,及测试表达式成立,也可以使用"=="
"字符串1" != "字符串2"
若字符串1不等于字符串2,则为真,及测试表达式成立,不能使用!==
·对于字符串的测试,一定要将字符串加双引号之后再进行比较。如[ -n "$myvar" ],特别是使用[]的场景。
·比较符号(例如=和!=)的两端一定要有空格。
·“!=”和“=”可用于比较两个字符串是否相同。
整数二元比较操作符
在[]和test中使用的比较符
-eq:相等
-ne: 不等于
-gt: 大于
-ge: 大于等于
-lt: 小于
-le:小于等于
在(())和[[]]中使用的比较符号·
==或=
!=
>
>=
<
<=
1)·“=”和“!=”也可在[]中做比较使用,但在[]中使用包含“>”和“<”的符号时,需要用反斜线转义,有时不转义虽然语法不会报错,但是结果可能会不对。
2)·也可以在[[]]中使用包含“-gt”和“-lt”的符号,但是不建议这样使用。
3)·比较符号两端也要有空格。
逻辑操作符
1、逻辑操作符
在[]和test中使用
-a and,与,两端都为真,则结果为真
-o or,或,两端有一个为真,则结果为真
! not,非,两端取反,则结果为真
在[[]]和(())中使用
&& and,与,两端都为真,则结果为真
|| or,或,两端有一个为真,则结果为真
! not,非,两端取反,则结果为真
测试表达式test、[]、[[]]、(())的区别总结
if的条件语句的语法
1、基本语法:
if [ command ]; then
符合该条件执行的语句
fi
2、扩展语法
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi
if的嵌套
格式一:
if [ condition ]
then
if [ condition ]
then
commands1
else
commands2
fi
fi
格式二:
if [ condition ]
then
if [ condition ]
then
commands1
else
commands2
fi
else
commands3
fi
case语句语法
case 变量名 in
值1)
指令1
;;
值2)
指令2
;;
值3)
指令3
;;
*)
默认
esac
case语句会将该变量的值与每个值相比较,如果与某个值相等,则执行该value所对应的一组语句。当遇到“;;”符号时,就跳出case语句,执行esac语句后面的语句。如果没有任何一个值与variable的值相匹配,则执行*后面的一组语句。