shell 比较判断

引用自:

http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/comparison-ops.html

#! /bin/sh
var1=20
var2=21
if [ $var1 -ne $var2 ];then
  echo "1. -ne means NOT equal true"
fi

xyz="11"
if [ -n "$xyz" ];then
  echo "2. -n means init true(MUST to use \"\")"
fi

if [ -z "$1" ];then
  echo "3. -z means NOT command-line arguments true"
fi

file="/etc/mtab"
if [ -e $file ];then
  echo "4. -e means file exists true"
fi

home="/root"
if [ -d $home ];then
  echo "5. -d means dir exists true"
fi

[ "true" ] && [ "false" ] && [ 0 ] && [ 1 ] && [ -1 ] && echo "6. string and integer means true"
 

二元 比较操作符用来比较两个变量或数字. 注意整数比较与字符串比较的区别.

整数比较

-eq

等于

if [ "$a" -eq "$b" ]

-ne

不 等于

扫描二维码关注公众号,回复: 1362606 查看本文章

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

= 等价.

Note

== 比较操作符在双 中括号对 和单中括号对中的行为是不同的.

  1 [[ $a == z* ]]    # 如果$a以"z"开头(模式匹配)那么结果将为真
  2 [[ $a == "z*" ]]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.
  3 
  4 [ $a == z* ]      # 文件扩展匹配(file globbing)和单词分割有效. 
  5 [ "$a" == "z*" ]  # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真. 
  6 
  7 # 感谢, Stephane Chazelas
!=

不等号

if [ "$a" != "$b" ]

这个操作符将在[[ ... ]] 结构中使用模式匹配.

<

小于, 按照ASCII字符进行排序

if [[ "$a" < "$b" ]]

if [ "$a" \< "$b" ]

注意"<" 使用在[ ] 结构中的时候需要被 转义.

>

大 于, 按照ASCII字符进行排序

if [[ "$a" > "$b" ]]

if [ "$a" \> "$b" ]

注意">" 使用在[ ] 结构中的时候需要被 转义.

参考例 子 26-11 , 这个例子展示了如何使用这个比较操作符.

-z

字 符串为"null" , 意思就是字符串长度为零

-n

字符串不为"null" .

Caution

-n 使用在中括号中进行条件测试的时候, 必须要把字符串用双引号引用起来. 如果采用了未引用的字符串来使用! -z , 甚至是在条件测试中括号(参见例 子 7-6 )中只使用未引用的字符串的话, 一般也是可以工作的, 然而, 这是一种不安全的习惯. 习惯于 使用引用的测试字符串才是正路.

猜你喜欢

转载自socol.iteye.com/blog/1059064