Shell中变量及数字比较
-eq 等于,如:if [ "$a" -eq "$b" ] -ne 不等于,如:if [ "$a" -ne "$b" ] -gt 大于,如:if [ "$a" -gt "$b" ] -ge 大于等于,如:if [ "$a" -ge "$b" ] -lt 小于,如:if [ "$a" -lt "$b" ] -le 小于等于,如:if [ "$a" -le "$b" ] < 小于(需要双括号),如:(("$a" < "$b")) <= 小于等于(需要双括号),如:(("$a" <= "$b")) > 大于(需要双括号),如:(("$a" > "$b")) >= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较
= 两个字符串是否相等 != 两个字符转是否不等 -n 字符串长度不为零,不为零则为true -z 字符串长度为零,为零则为true
==的功能在[[]]和[]中的行为如下:
= # 等于,如:if [ "$a" = "$b" ] == # 等于,如:if [ "$a" == "$b" ],与=等价 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true [[ $a == "z" ]] # 如果$a等于z(字符匹配),那么结果为true [ $a == z* ] # File globbing 和word splitting将会发生 [ "$a" == "z" ] # 如果$a等于z(字符匹配),那么结果为true一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是. 但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
[[]]结构中大于小于符号的使用
< 小于,在ASCII字母顺序下.如: if [[ "$a" < "$b" ]] if [ "$a" \< "$b" ] # 注意:在[]结构中"<"需要被转义. > 大于,在ASCII字母顺序下.如: if [[ "$a" > "$b" ]] if [ "$a" \> "$b" ] # 注意:在[]结构中">"需要被转义. # 字符串的比较满足ASCII表格规则,具体参考Example 26-11来查看这个操作符应用的例子.
逻辑运算符
-a 逻辑与,等于&&,&&仅能在[[]]中使用 -o 逻辑或,等于||,||仅能在[[]]中使用 ! 逻辑取反, () 改变表达式的优先级
-e 文件名 如果文件存在则为真 -r 文件名 如果文件存在且可读则为真 -w 文件名 如果文件存在且可写则为真 -x 文件名 如果文件存在且可执行则为真 -s 文件名 如果文件存在且至少有一个字符则为真 -d 文件名 如果文件存在且为目录则为真 -f 文件名 如果文件存在且为普通文件则为真 -c 文件名 如果文件存在且为字符型特殊文件则为真 -b 文件名 如果文件存在且为块特殊文件则为真
file1 -ef file2 如果两个文件具有同样的设备号和i结点号则为真
file1 -nt file2 如果file1比file2新,则为真
file1 -ot file2 如果file1比file2旧,则为真
-h 文件名 文件存在并且是一个硬符号链接 -L 文件名 文件存在并且是一个软符号链接 -k 文件名 文件存在并且设置了sticky位 -p 文件名 文件存在并且是一个命名管道 -S 文件名 文件存在并且是一个socket文件 -u user 文件名 文件存在且用户属主是user -O user 文件名 文件存在并且属于有效用户ID -g group 文件名 文件存在并且属组是group -G group 文件名 文件存在并由有效组ID拥有
心若向阳,无谓悲伤!