Shell脚本处理“integer expression expected”

Posted by Harid五月 - 20 - 2011 Leave comments   854 views 

先感叹一句:要学好Shell脚本不容易啊!

再感叹一句:要学好任何东西几乎都不容易啊!

 

Shell脚本里,在用 test 的参数作比较的时候,如“ [ $temp -gt "100" ]”,可能会出现如题的“ integer expression expected”错误。这是因为test 的这几个参数: -gt ,-lt,-eq 比较的都是数字,因此变量temp如果是一个字符串的话就会出现上述错误了。将原句改为“ [ $temp -gt 100 ]” 结果也是一样的。

解决这个问题可以采取一种比较迂回的办法,即用awk工具对变量比较,返回比较的结果,再将比较的结果与相应的数字量进行比较。具体到上述例子,可以这样处理:

[ `echo $temp | awk -v bi=100 '{print($1>bi)?"1":"0"}'` -eq "1" ]

方法肯定还有很多,欢迎共享。

   声明:本文采用 BY-NC-SA 协议进行授权 | 星期九
   原创文章转载请注明:转自《Shell脚本处理“integer expression expected”

分享本文: 腾讯微博 QQ空间 人人网 百度空间 开心网 新浪微博 Google Reader 豆瓣
Comments(2) Leave comments
  1. Gravatar
    冰古 Google Chrome Google Chrome 16.0.912.75 Windows Windows 7

    既然是字符,为何不用

    1.2. Checking strings
    s1 = s2 Check if s1 equals s2. s1 != s2 Check if s1 is not equal to s2. -z s1 Check if s1 has size 0. -n s1 Check if s2 has nonzero size. s1 Check if s1 is not the empty string.

    Example:

    if [ $myvar = "hello" ]
    then
    echo "We have a match"
    fi

    shell用不惯啊,没有php简单方便。

    • Gravatar Harid  @  一月 13th, 2012 at 08:40 replied.

      如果是判等当然直接比较字符串就OK了。但是如果是某俩个数字字符串比较呢?

9 + 2 =  (required)
 疑问 鼓掌 难过 呲牙 强 微笑 快哭了 坏笑 汗 奋斗 撇嘴 OK 偷笑 委屈 尴尬 傲慢 握手 玫瑰 胜利 大哭 抱拳
启用云输入法:      

NOTICE1: You should type some Chinese word (like “你好”) in your comment to pass the spam-check, thanks for your patience!

NOTICE2: 请申请gravatar头像(http://en.gravatar.com),木有头像的会显示为“小怪物”头像,将难以通过审核!

NOTICE3: 如果您能消除一下评论框旁边的邻居的寂寞的话,Harid将不胜感激,你懂的!^_^