免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 10477 | 回复: 13
打印 上一主题 下一主题

请教在bsh里面如何比较两个变量的大小? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-04 17:26 |只看该作者 |倒序浏览
我是这样用的:
if [ `echo "$GUOTONG_TSKSD_ALL > $GUOTONG_TSKXS_ALL" |bc` -eq 1  ]

是不是变量$GUOTONG_TSKSD_ALL > $GUOTONG_TSKXS_ALL"  if的返回为ture?

还有其它方法吗?

论坛徽章:
0
2 [报告]
发表于 2010-11-04 17:30 |只看该作者
整数比较

-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"开头(模式匹配)那么将为true
                2 [[ $a == "z*" ]]  # 如果$a等于z*(字符匹配),那么结果为true
                3
                4 [ $a == z* ]      # File globbing 和word splitting将会发生
                5 [ "$a" == "z*" ]  # 如果$a等于z*(字符匹配),那么结果为true
                一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是.
                但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.
!=                不等于,如:if [ "$a" != "$b" ]
                这个操作符将在[[]]结构中使用模式匹配.
<                小于,在ASCII字母顺序下.如:
                if [[ "$a" < "$b" ]]
                if [ "$a" \< "$b" ]
                注意:在[]结构中"<"需要被转义.
>                大于,在ASCII字母顺序下.如:
                if [[ "$a" > "$b" ]]
                if [ "$a" \> "$b" ]
                注意:在[]结构中">"需要被转义.
                具体参考Example 26-11来查看这个操作符应用的例子.
-z                字符串为"null".就是长度为0.
-n                字符串不为"null"
                注意:
                使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用! -z
                或者就是未用""引用的字符串本身,放到[]结构中(见Example 7-6)虽然一般情况下可
                以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.[1]

论坛徽章:
0
3 [报告]
发表于 2010-11-04 20:41 |只看该作者
非常感谢!
我的变量是带小数的,所以是交给bc来计算的

但是结果如何比较呢?

论坛徽章:
0
4 [报告]
发表于 2010-11-04 21:12 |只看该作者
回复 3# tomorrower
  1. [oracle@s12071 ~]$ echo "0.14 > 0.15" | bc
  2. 0
  3. [oracle@s12071 ~]$ echo "306.152 > 0.15" | bc
  4. 1
  5. [oracle@s12071 zhaob]$ echo "306.152 == 0.15" | bc
  6. 0
  7. [oracle@s12071 zhaob]$ echo "0.15 == 0.15" | bc
  8. 1
  9. [oracle@s12071 ~]$ echo "0.15 < 0.15" | bc
  10. 0
  11. [oracle@s12071 ~]$
复制代码
a=12.21
b=15.1
c=`echo "$a > $b" | bc`
然後, 如果 $c 是 1 , 那就成立, 否則不成立.

论坛徽章:
0
5 [报告]
发表于 2010-11-04 21:43 |只看该作者
非常感谢lkk2003rty , 小数的比较还是需要使用bc来判断了

论坛徽章:
0
6 [报告]
发表于 2010-11-05 00:44 |只看该作者
回复 4# lkk2003rty


    这个。。学习 了

论坛徽章:
0
7 [报告]
发表于 2011-07-15 16:18 |只看该作者
又学到了点知识!谢谢

论坛徽章:
0
8 [报告]
发表于 2011-07-15 16:19 |只看该作者
又学到了点知识!谢谢

论坛徽章:
0
9 [报告]
发表于 2011-07-15 22:42 |只看该作者
其实不用bc也是可以的:
  1. xiabao@6P9SN2X ~/test$ [ 0.11 \> 0.10 ] && echo ture || echo wrong
  2. ture

  3. xiabao@6P9SN2X ~/test$ [ 0.11 \< 0.10 ] && echo ture || echo wrong
  4. wrong

  5. xiabao@6P9SN2X ~/test$ [[ 0.11 > 0.10 ]] && echo ture || echo wrong
  6. ture

  7. xiabao@6P9SN2X ~/test$ [[ 0.11 < 0.10 ]] && echo ture || echo wrong
  8. wrong
复制代码

论坛徽章:
3
处女座
日期:2014-11-05 11:02:4315-16赛季CBA联赛之四川
日期:2015-12-10 14:37:4015-16赛季CBA联赛之天津
日期:2017-09-08 18:39:34
10 [报告]
发表于 2011-07-19 18:14 |只看该作者
回复 9# xiaopan3322


    小于等于呢
  1. myhost:/var/log # [[ 0.1 <= 0.2 ]]
  2. -bash: syntax error in conditional expression
  3. -bash: syntax error near `0.2'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP