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

字符串比较

操作符说明示例
=等于if [ "$a" = "$b" ]
==等于(与 = 等价)if [ "$a" == "$b" ]
!=不等于if [ "$a" != "$b" ]
<小于,按 ASCII 字符排序if [[ "$a" < "$b" ]]if [ "$a" \< "$b" ]
>大于,按 ASCII 字符排序if [[ "$a" > "$b" ]]if [ "$a" \> "$b" ]
-z字符串为 null(长度为零)[ -z "$string" ]
-n字符串不为 null[ -n "$string" ]

注意 == 在双中括号对 [[ ]] 和单中括号对 [ ] 中的行为不同:

  • [[ $a == z* ]] 模式匹配:如果 $a 以”z”开头则为真
  • [[ $a == "z*" ]] 字面匹配:$a 完全等于字符串”z*”
  • [ $a == z* ] 文件扩展匹配(file globbing)和单词分割有效
  • [ "$a" == "z*" ] 字面匹配:$a 完全等于”z*”

[ ] 结构中使用 <> 需要转义(\<\>),在 [[ ]] 中不需要。

复合条件

操作符说明示例
-a逻辑与[ "$exp1" -a "$exp2" ]
-o逻辑或[ "$exp1" -o "$exp2" ]

在双中括号 [[ ]] 结构中,逻辑运算符 &&|| 等同于 -a-o

  • [[ condition1 && condition2 ]]
  • [[ condition1 || condition2 ]]

-o-a 操作符一般用在 test 命令或单中括号 [ ] 结构中。

#shell-scripting