@(Shell中的控制语句)
测试语句十Shell的特有功能,Shell提供了一组测试运算符,通过这些运算符,Shell程序能够判断某个或者某几个条件是否成立。
在Shell中用户可以使用测试语句来测试指定条件表达式的条件的真和假。当指定条件为真,条件测试的返回值为0;反之,条件测试的返回值为非0值。条件测试的语法有两种,分别是test命令和[]命令
test expression其中,参数expression表示需要进行测试的语句,整个test语句为真,test返回0,若为假,则返回非0
==笔者强烈推荐test语句,[]语句十分糟糕,要求十分严格,会出现各式各样的错误,不利于初学者学习==
[expression]其中,参数expression的语句与test命令中语法完全相同。条件表达式和左右方括号之间都必须有一个空格
文件测试指的是根据给出的路径,判断当前路径下的文件属性及类型。
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 | 
test 操作符 | 操作符 | 说明 | 
|---|---|
| str | 判断指定字符串是否为空 | 
| str1==str2 | 若字符串相等就为0 | 
| -n str | 判断字符串是否为非空串,若为空串则测试结果为0 | 
| -z str | 若为空串,则测试结果为0 | 
与字符串类似,数值测试也有两种形式的语法
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 | 
逻辑操作符相当于c语言中的&&、||、!
|操作符|说明|
|:---:|:---:|
|!exp|逻辑非,条件表达式为假,则该操作符的运算结果为真
|exp1 -a exp2|逻辑与,条件exp1和exp2的值都为真时,整个表达式为真
|exp1 -o exp2|逻辑或,条件表达式exp1和exp2的值有一个为真,整个表达式为真
|(exp)|圆括号,将表达式分组,优先得到结果
原文:https://www.cnblogs.com/lzy321/p/10920125.html