日期:2014-05-16  浏览次数:20829 次

linux中shell比较2个数大小
#!/bin/sh
#输入2个数a,b
read a
read b
if [ a > b ]
then
echo "a=$a"
echo "b=$b"
echo "a>b"
else
echo "a<b"

输入3,4或者输入4,3
为什么,都不会输入a<b

------解决方案--------------------
数字比较大小用 
-eq 
-gt
-lt
-le
-ge

>表示重定向,你输入3,4的时候,当前目录会多一个文件"4",输入4,3的时候,会多一个文件"3"。
------解决方案--------------------
如果要比较数值大小if [ a > b ],应该是$a和$b,而且[]中没有>比大小的作用,[] 改成[[]],或者使用-gt , -lt
------解决方案--------------------
规则问题,Linux中定义 < >为输入输出重定向,数字大小的比较为 -eq 等于;-gt 大于;-lt 小于;-le 小于等于;-ge 大于等于;-ne 不等于。比较中读入的变量应为 $a,$b,if [ $a -gt $b ]。
------解决方案--------------------
引用:
如果要比较数值大小if [ a > b ],应该是$a和$b,而且[]中没有>比大小的作用,[] 改成[[]],或者使用-gt , -lt


补充一下:
[]里面是可以用>的,只不过需要转义。(而且它是字符串比较,不是数值比较。)

[root@ ~]# [ a \> b ] && echo yes 
------解决方案--------------------
 echo no
no
[root@ ~]# [ c \> b ] && echo yes 
------解决方案--------------------
 echo no
yes