问题:
我无法让数值比较工作正常:
echo "enter two numbers";
read a b;echo "a=$a";
echo "b=$b";if [ $a \> $b ];
thenecho "a is greater than b";
elseecho "b is greater than a";
fi;
问题在于,它比较的是从第一位开始的数,即9
大于10
,但1
大于09
。
我如何将数字转换为一种类型来做真正的比较?
回答:
在 Bash 中,你可以在算术语境中进行比较:
if (( a > b )); thenecho "a is greater than b";
fi
对于不支持 (())
的 POSIX shell,可以使用 -lt
和 -gt
。
咱们看以下示例代码:
# 比较两个数字的大小
a=10
b=20
if [ $a -gt $b ]; thenecho "$a is greater than $b"
elseecho "$a is not greater than $b"
fi# 比较一个数字和一个字符串的大小
c=30
d="30"
if [ $c -lt $d ]; thenecho "$c is less than $d"
elseecho "$c is not less than $d"
fi
除此之外,整数还可以用以下操作符进行比较:
- -eq: 等于
- -ne: 不等于
- -le: 小于等于
- -ge: 大于等于
你可以使用命令 help test
或 man test
获得比较操作符的完整列表及释义。
如果将表达式放在 [[ ]]
和 [ ]
中,进行整数比较时不要使用运算符 >
<
:
root@linux:~# a=9
root@linux:~# b=10
root@linux:~# if (( $a < $b )) ; then echo "$a < $b"; fi
9 < 10
root@linux:~# if [[ $a > $b ]] ; then echo "$a > $b"; fi
9 > 10
root@linux:~# if [ $a > $b ] ; then echo "$a > $b"; fi
9 > 10
其中后面两次比较都是将变量 a
和 b
当作字符串按字典顺序进行排序比较的,所以执行结果跟我们的预期结果不一致。
参考:
- stackoverflow question 18668556
- help test
相关阅读:
- 如何在Bash中连接字符串变量
- sh和Bash的区别
- 2>&1是什么意思
- 为什么我不能在脚本中使用“cd“来更改目录
- 如何使用bash脚本并行运行多个程序
- 为什么要使用xargs命令
- xargs命令用法实例