无效算术运算符 - 运行检查时

时间:2014-05-22 16:26:02

标签: curl integer operator-keyword

我正在尝试评估来自rung卷曲检查的回报。

我的剧本:

#!/bin/bash
length=$(curl -s -I www.google.com | grep Length | awk {'print $2'})
if [[ $length -le 300 ]]
        then
                echo "length is too small"
fi

输出为258:

mira:~ david$ curl -s -I www.google.com | grep Length | awk {'print $2'}  
258

所以我想运行echo命令,因为它小于300。

我收到错误:

  

mira:~david $ ./test.sh")语法错误:算术运算符无效   (错误令牌是" mira:~david $

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

问题是来自curl的返回行李\r

 bash -x test.sh 
++ grep Length
++ curl -s -I www.google.com
++ awk '{print $2}'
+ length=$'258\r'
+ '[' $'258\r' -le 300 ']'
: integer expression expected

你可以通过在awk上使用printf而不是print来解决这个问题:

#!/bin/bash
length=$(curl -s -I www.google.com | grep Length | awk '{printf "%d",$2}')
if [[ "$length" -le 300 ]]
        then
                echo "length is too small"
fi

结果:

tiago@dell:~$ bash test.sh 
length is too small
tiago@dell:~$ bash -x test.sh 
++ grep Length
++ curl -s -I www.google.com
++ awk '{printf "%d",$2}'
+ length=258
+ [[ 258 -le 300 ]]
+ echo 'length is too small'
length is too small

PS。 bash -x对于调试shell脚本非常有帮助。