다음과 같은 파일이 있고 이를 while 루프의 입력으로 읽고 있습니다.
이 명령은 다음 cat status_1.txt
을 생성합니다.
SQLLOADER|FALSE
TX3|TRUE
아래는 내 스크립트입니다.
#!/bin/bash
set -x
cat /iris/shrikant/scripts/status_1.txt;
echo
echo
IFS="|"
while read a b
do
date;
c=TRUE
if [ "${b}" = "${c}" ]; then
echo $a is freezed;
else
echo $a is not freezed;
fi;
done < status_1.txt;
하지만 원하는 결과를 얻지 못했습니다.
cat /iris/shrikant/scripts/status_1.txt
SQLLOADER|FALSE
TX3|TRUE
+ cat /iris/shrikant/scripts/status_1.txt
SQLLOADER|FALSE
TX3|TRUE
+ echo
+ echo
+ IFS='|'
+ read a b
+ date
Tue Nov 6 23:38:19 +08 2018
+ c=TRUE
+ '[' $'FALSE\r' = TRUE ']'
+ echo SQLLOADER is not freezed
SQLLOADER is not freezed
+ read a b
+ date
Tue Nov 6 23:38:19 +08 2018
+ c=TRUE
+ '[' $'TRUE\r' = TRUE ']'
+ echo TX3 is not freezed
TX3 is not freezed
+ read a b
값이 일치하면 if 문은 일치하는 조건 대신 else 문을 인쇄합니다.
답변1
이 파일은 status_1.txt
DOS 텍스트 파일입니다. 이는 추적 출력의 값 끝에 있는 (캐리지 리턴)에서 \r
분명합니다 .$b
두 가지 옵션이 있습니다:
dos2unix
다음과 같은 도구를 통해 텍스트 파일을 Unix 텍스트 파일 형식으로 변환합니다.고려하고
\r
( 값이 줄 끝에서 가져 오지 않기 때문에$b
나타나지 않습니다 ) 사용$a
if [ "$b" = "$c"$'\r' ]
답변2
IPout 파일은 DOS
문자 앞에 Carriage Return
문자를 포함하도록 형식이 지정되었습니다 Newline
.
파일이 적절한 UNIX 형식인지 확인하십시오.