2014-03-03 3 views
1

내 CentOS 5.3에이 bash 스크립트가 있습니다.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"을 얻고 출력을 인쇄하도록해야한다. 내가 스크립트를 실행할 때,이 오류 메시지입니다 : 나는 것으로 나타났습니다

 
+ RESULT=$'1\r' 
..... 
+ '[' $'1\r' -lt 5 ']' 

: 내가 디버그 모드를 설정 그래서

 
: integer expression expected 

, 나는 "RESULT"변수 출력을 발견 "\ r"출력이 값에 첨부됩니다.

아무도 내가 그 출력에 "\ r"이있는 이유와 그 오류를 제거하는 방법을 알려 주시면 감사하겠습니다. CentOS 6.3에서 시도했지만 문제가 없습니다.

 
# rpm -qa bash 
bash-3.2-32.el5_9.1 

감사합니다. James

답변

3

입력 파일에 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 피할 수 있습니다.

+0

dos2unix filename filename을 시도했지만 제대로 작동하지 않습니다. 그러나 당신이 제안한 것과 함께, 그것은 잘 작동하고 있습니다. 감사! –

+0

단일 \ r은 Mac 줄 바꿈입니다. mac2unix를 사용해야합니다. –