if 语句不能正常工作

if 语句不能正常工作

我有一个文件如下所示,我正在 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

您有两个选择:

  1. 通过例如工具将文本文件转换为Unix文本文件格式dos2unix,或者

  2. 考虑\r$b(它不会出现,$a因为它的值不是从行尾获取的)并用

    if [ "$b" = "$c"$'\r' ]
    

答案2

您的 ipout 文件的DOS格式是在字符之前包含Carriage Return字符Newline

确保您的文件采用适当的 UNIX 格式。

相关内容