test 测试文件状态
文件状态测试
-L 符号连接
-u 文件有suid位设置
-e 关于文件的测试,测试文件是否存在
-n 测试字符串长度是否大于0
-r filename 档案可读取
-w filename 档案可写入
-x filename 档案可执行
-f filename 档案为一般档,正规文件
-d filename 档案为目录
-s filename 档案为非空的一般档 ,文件长度大于0、非空
-t 确认脚本运行为交互模式还是非交互模式,test返回值为1,则为交互模式
-z 测试变量是否设置,为空则执行then,反之,else
test -r "$filename" -a -s "$filename"
命令格式: test condition 或 [ condition ]
使用方括号时,要注意在条件两边加上空格,如[ -w t.txt ] 测试t.txt是否可写
$? 用于判断上一个命令是不是正常退出
-a 逻辑与
-o 逻辑或
! 逻辑否 用来比较两个文件状态
如果没有括号,则优先权则为"!" > "-a" > "-o"
如[ -w a.txt -a -w b.txt ] 用来判断a.txt 和 b.txt 是不是都可写
= 两个字符串相等 != 不相等 -z 空串 -n 非空串
注:在设置变量的时候不一定要用双引号,但是字符串比较时必须使用
对变量赋值是,等号左右不可以加空格。对于条件判断等号左右必须加空格。
测试数值
-eq 数值相等
-ne 数值不相等
-gt >,大于
-lt <,小于
-le <=,小于等于
-ge >=,大于等于
注:将数值放入变量比较时,可以不加双引号,而用数值直接比较时,必须加
[ "990" -le "995" -a "123" -gt "33" ] 990 <= 995 是否为真,若是,123>33是否为真,若是则结果为真0,否则为1
if [ $# -lt 1 ] 参数个数小于1,测试
[ $? = 0 ] 测试上一个命令是否正常退出,正常退出0,非正常1
[ -d "A/B/C"] 测试A/B/C目录是否存在
[ -f a.txt ] 测试文件a.txt是否存在
[ -z a.txt ] 测试文件内容是否为空
expr
: 字串比较。比较的方式是以两字串的第一个字母开始,而以第二个字串的 字母结束。如果相同时,则输出第二个字串的字母个数,如果不同时则传 回0 。
如 expr "hello word" : "hello wo" 结果为8
\| OR运算,如果它非null或者非0,返回第一个表达式,否则返回第二个表达式
\& AND运算,如果非null或非0,返回第一个表达式,否则返回0
=、\>、\>=、\<、\<、!= 整数比较运算符
+、-、\*、/、% 整数算术运算符,其中%求余数。
当expression中含有"*", "(", ")" 等符号时,必须在其前面加上"\" ,以免被 Shell 解释成其它意义。
expr 2 \* \( 3 + 4 \) 其输出为14
expr 10 + 10 计算10+10的值
+ 加 - 减 \* 乘 / 除
运算符左右必须加空格