在bash脚本上回车\ r \ n

时间:2014-03-03 06:45:02

标签: bash sh

我的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

谢谢。 詹姆斯

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