通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
[ -a file ] 如果 file 存在则为真。
[ -b file ] 如果 file 存在且是一个块特殊文件则为真。
[ -c file ] 如果 file 存在且是一个字特殊文件则为真。
[ -d file ] 如果 file 存在且是一个目录则为真。
[ -e file ] 如果 file 存在则为真。
[ -f file ] 如果 file 存在且是一个普通文件则为真。
[ -g file ] 如果 file 存在且已经设置了SGID则为真。
[ -h file ] 如果 file 存在且是一个符号连接则为真。
[ -k file ] 如果 file 存在且已经设置了粘制位则为真。
[ -p file ] 如果 file 存在且是一个命名管道(F如果O)则为真。
[ -r file ] 如果 file 存在且是可读的则为真。
[ -s file ] 如果 file 存在且大小大于0则为真。
[ -u file ] 如果 file 存在且设置了SUID (set user ID)则为真。
[ -w file ] 如果 file 如果 file 存在且是可写的则为真。
[ -x file ] 如果 file 存在且是可执行的则为真。
[ -z string ] 如果 string 的字符串的长度为0则真
[ -n string ] 如果 string 为字符串的长度不为零则为真
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -O OPTIONNAME ] 如果 OPTIONNAME 存在且属有效用户ID则为真。
[ -G file ] 如果 file 存在且属有效用户组则为真。
[ -L file ] 如果 file 存在且是一个符号连接则为真。
[ -N file ] 如果 file 存在 and has been mod如果ied since it was last read则为真。
[ -S file ] 如果 file 存在且是一个套接字则为真。
[ file1 -nt file2 ] 如果 file1 比 file2 更新则真,或 file1 存在file2不存在则为真。
[ file1 -ot file2 ] 如果 file1 比 file2 更旧则真,或 file2 存在file1不存在则为真。
[ file1 -ef file2 ] 如果 file1 和 file2 指向相同的设备和节点号则为真。
[ string1 = string2 ] 如果2个字符串相同则为真。
[ string1 != string2 ] 如果字符串不相等则为真。
[ string1 < string2 ] 如果 “string1” 按字典排序在 “string2” 之前则为真。
[ string1 > string2 ] 如果 “string1” 按字典排序在 “string2” 之后则为真。
在比较时,数字和字符串用不同的比较符号
1.如果a>b且a<c
if (( a > b )) && (( a < c )) 或者
if [[ $a > $b ]] && [[ $a < $c ]]
或者 if [ $a -gt $b -a $a -lt $c ]
2.如果a>b或a<c
if (( a > b )) || (( a < c ))
或者 if [[ $a > $b ]] || [[ $a < $c ]]
或者 if [ $a -gt $b -o $a -lt $c ]
3. -o = or , -a = and , 但我一向只用 || 或者 &&
4."||"和"&&"在SHELL里可以用吗?也就是第一个写成if [ a>b && a<c ]也可以吗?
可用, 但是要两个独立的 [ ] , [[ ]] 或 (( )) 看 1
5 -ne 比较数字 (numberic) ; != 比较字符 (string), 但后者拿来 比较数字也可,只是不是标准用法
-lt 是等同 < , 但 < 只能在 shell 的数值操作符 (( )) 或 者 逻缉操作符 [[ ]] 才可使用。