我的CentOS 5.3上有这个bash脚本。
#!/bin/bash RESULT=$(cat /tmp/logfile.log | grep -i "Backlog File Count" | awk '{print $6}') if [ "${RESULT}" -lt "5" ]; then echo "${RESULT} is less than 5" else echo "${RESULT} is greater than 5" fi
/tmp/logfile.log:
Backlog File Names (first 1 files)
这个bash脚本应该在日志文件中获取值“1”并打印输出。但是,当我运行脚本时,这是错误消息:
: integer expression expected
所以当我设置调试模式时,我找到了“RESULT”变量输出:
+ RESULT=$'1\r' ..... + '[' $'1\r' -lt 5 ']'
我注意到“\ r”输出附加在值上。
如果任何人能引导我为什么在该输出上有“\ r”以及如何摆脱该错误,我将不胜感激。我尝试过CentOS 6.3,没有问题。
# rpm -qa bash bash-3.2-32.el5_9.1
谢谢。 詹姆斯
答案 0 :(得分:4)
您的输入文件包含CR + LF行结尾。在读取变量之前剥去CR。说:
RESULT=$(tr -d '\r' < /tmp/logfile.log | grep -i "Backlog File Count" | awk '{print $6}')
或者,您可以使用dos2unix
或任何其他实用程序从输入文件中删除回车。
此外,说:
cat file | grep foobar
相当于说:
grep foobar file
并避免使用Useless Use of Cat。