@(Shell中的控制语句)
1. 条件测试语句
测试语句十Shell的特有功能,Shell提供了一组测试运算符,通过这些运算符,Shell程序能够判断某个或者某几个条件是否成立。
在Shell中用户可以使用测试语句来测试指定条件表达式的条件的真和假。当指定条件为真,条件测试的返回值为0;反之,条件测试的返回值为非0值。条件测试的语法有两种,分别是test命令和[]命令
1.1 test语句
test expression
其中,参数expression表示需要进行测试的语句,整个test语句为真,test返回0,若为假,则返回非0
==笔者强烈推荐test语句,[]语句十分糟糕,要求十分严格,会出现各式各样的错误,不利于初学者学习==
1.2[]语句
[expression]
其中,参数expression的语句与test命令中语法完全相同。条件表达式和左右方括号之间都必须有一个空格
1.3文件测试
文件测试指的是根据给出的路径,判断当前路径下的文件属性及类型。
test op file
[ op file ]
环境变量 | 说明 |
---|---|
-a | 若文件存在,则条件测试返回结果为0 |
-b | 若文件存在,且为块文件,则条件测试返回结果为0 |
-c | 若文件存在,且为字符文件,则条件测试返回结果为0 |
-d | 若文件存在,且为目录文件,则条件测试返回结果为0 |
-e | 若文件,则条件测试返回为0 |
-f | 若文件存在,且为常规文件,则条件测试返回结果为0 |
-r | 若文件存在且可读,则条件测试返回结果为0 |
-w | 若文件存在且可写,则条件测试返回结果为0 |
-x | 若文件存在且可执行,则条件测试返回结果为0 |
-p | 若文件存在且是FIFO文件,则条件测试返回结果为0 |
-s | 若文件存在且不是空文件,则条件测试返回结果为0 |
1.4字符串测试
test 操作符
操作符 | 说明 |
---|---|
str | 判断指定字符串是否为空 |
str1==str2 | 若字符串相等就为0 |
-n str | 判断字符串是否为非空串,若为空串则测试结果为0 |
-z str | 若为空串,则测试结果为0 |
1.5数值测试
与字符串类似,数值测试也有两种形式的语法
test number1 op number2
或者
[ number1 op number2 ]
操作符 | 说明 |
---|---|
n1 -eq n2 | 比较n1是否等于n2,如果等于,则测试结果为0 |
n1 -ne n2 | 若n1不等于n2,则测试结果为0 |
n1 -lt n2 | 比较n1是否小于n2,n1如果小于n2,测试结果为0 |
n1 -le n2 | 比较n1是否小于等于n2,n1如果小于等于n2,测试结果为0 |
n1 -gt n2 | 比较n1是否大于n2,n1如果大于n2,测试结果为0 |
n1 -ge n2 | 比较n1是否大于等于n2,n1如果大于等于n2,测试结果为0 |
1.5逻辑操作符
逻辑操作符相当于c语言中的&&、||、!
|操作符|说明|
|:---:|:---:|
|!exp|逻辑非,条件表达式为假,则该操作符的运算结果为真
|exp1 -a exp2|逻辑与,条件exp1和exp2的值都为真时,整个表达式为真
|exp1 -o exp2|逻辑或,条件表达式exp1和exp2的值有一个为真,整个表达式为真
|(exp)|圆括号,将表达式分组,优先得到结果