由于写bash脚本时经常用到if这类的条件判断,而bash中的操作符跟C里面的有点大不一样,头开始还很不习惯,经常为了一个判断忙活上半天,于是找了点系统的资料看了下操作符相关的东西,简要罗列如下,希望对各位也有些许帮助。

文件测试:

-e 文件存在
-a 文件存在(已弃用)
-f 文件为一般文件,非目录或设备文件
-s 文件大小不为0
-d 这是一个目录
-c 这是一个块设备
-p 这个文件是一个管道
-h 这是一个符号链接文件
-L 这是一个符号链接
-S 这是一个Socket
-t 文件被关联到一个终端设备上
-w 文件是否有可写权限
-x 文件是否有可执行权限
-g sgid标记被设置到文件或目录上
-u suid标记被设置到文件或目录上
-k 设置粘贴位置
-O 判断自己是否文件拥有者
-G 文件所属组是否与你的相同
-N 从文件上次被读取到现在是否被修改过
file1 -nt file2 file1是否比file2新
file1 -et file2 file1和file2是否相同文件的硬链接
! 非

整数比较:

-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"))

字符串比较:

= 等于 if [ "$a" = "$b" ]
== 等于,与=等价 if [ "$a" == "$b" ]
==比较操作符在双中括号对和单中括号对中的行为是不同的.
  1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么结果将为真
  2 [[ $a == "z*" ]]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.
  3 [ $a == z* ]      # 文件扩展匹配(file globbing)和单词分割有效. 
  4 [ "$a" == "z*" ]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真. 
!= 不等号,将在[[ ... ]]结构中使用模式匹配 if [ "$a" != "$b" ]
< 小于, 按照ASCII字符进行排序 if [[ "$a" < "$b" ]]"<"
  使用在[ ]结构中的时候需要被转义 if [ "$a" \< "$b" ]
> 大于, 按照ASCII字符进行排序 if [[ "$a" > "$b" ]]
  ">"使用在[ ]结构中的时候需要被转义 if [ "$a" \> "$b" ]
-z 字符串为"null", 意思就是字符串长度为零
-n 字符串不为"null".