目录
文件/类型判断
#test -e /root/FileName
[ -e FileName ]
判断文件是否存在(shell常用下边这条格式)
这两种没有输出结果,可以用echo $?显示上一条命令是否正确执行,0正确1错误
或者可以这样
[ -d FileName ] && echo "yes" || echo "no"
判断目录是否存在,存在输出yes,不存在输出no
文件权限判断
[ -w a ] && echo "yes" || echo "no"
只要 所有者 所属组 其他人 三个谁有写权限(w),都会为真(输出yes)
两个文件进行比较
[ X -ef Y ] && echo "yes" || echo "no"
判断X和Y是否
两个整数之间进行比较
字符串的判断
[ -z "Name" ] && echo "yes" || echo "no"
多重条件判断
aa=11
[ -n "$aa" -a $aa" -gt 23 ] && echo "yes" || echo "no"
判断变量aa是否有值,同时判断变量aa是否大于23
因aa值不大于23,所以第一个判断(-n)值为真,返回的结果也是no
aa=24
[ -n "$aa" -a $aa" -gt 23 ] && echo "yes" || echo "no"
输出yes
test执行条件表达式
该命令等价于 [。
编写 bash 条件表达式可用内建命令 test, [ ,组合命令 [[
文件操作符
-a FILE如果文件存在,则为true。
-b FILE如果文件是块特殊的,则为true。
-c FILE如果文件是特殊字符,则为true。
-d FILE如果文件是目录,则为true。
-e FILE如果文件存在,则为true。
-f FILE如果文件存在并且是常规文件,则为true。
-g FILE如果文件是set-group-id,则为true。
-h FILE如果文件是符号链接,则为true。
-L FILE如果文件是符号链接,则为true。
-k FILE如果文件的粘滞位(sticky)设置了,则为true。
-p FILE如果文件是命名管道,则为true。
-r FILE如果您可以读取文件,则为true。
-s FILE如果文件存在且不为空,则为true。
-S FILE如果文件是套接字,则为true。
-t FD如果在终端上打开FD,则为True。
-u FILE如果文件是set-user-id,则为true。
-w FILE如果文件可写,则为true。
-x FILE如果您可以执行文件,则为true。
-O FILE如果文件有效地归您所有,则为true。
-G FILE如果文件有效地归您的组所有,则为true。
-N FILE如果文件自上次读取以来已被修改,则为true。
FILE1 -nt FILE2根据修改日期,如果 file1比 file2新,则为true。
FILE1 -ot FILE2根据修改日期,如果 file1比 file2旧,则为true。
FILE1 -ef FILE2如果 file1为 file2的硬链接,则为true。
字符串运算符
-z STRING如果字符串为空,则为true。
-n STRING如果字符串不为空,则为true。
STRING如果字符串不为空,则为true。
STRING1 = STRING2 如果字符串相等,则为true。
STRING1 != STRING2 如果字符串不相等,则为true。
STRING1 < STRING2 如果 STRING1 的字典排序在 STRING2 之前,则为true。
STRING1 > STRING2 如果 STRING1 在字典排序在 STRING2 之后,则为true。
其他运算符
-o OPTION 如果启用了shell选项OPTION,则为true。
-v VAR 如果设置了shell变量VAR,则为true。
-R VAR 如果设置了shell变量VAR并且是变量引用,则为true。
!EXPR 如果expr为假,则为true。
EXPR1 -a EXPR2 如果expr1和expr2都为true,则为true。
EXPR1 -o EXPR2 如果expr1或expr2为true,则为true。
arg1 OP arg2 算术表达式测试; OP是 -eq,-ne,-lt,-le,-gt,-ge中的一个;算术表达式为真时返回true。