我的 shell 变量在 while 循环内的 if 语句中
my shell variable in if statement which is inside of while loop
我有下面的 while 循环,它逐行读取文件中的错误代码,如果在 log.txt 文件中找到此错误代码,那么我需要设置 alert=1 然后写入这些错误shell 变量,用分号连接它们。但是当我在下面写 while 循环时,它没有给出预期的结果。
log.txt文件数据:
ORA-03113
ORA-00933
errors.lst 文件数据:
ORA-03113
ORA-00933
错误
export LOGFILE=/temp/log.txt
alert=0
error=""
while IFS= read -r line || [[ -n "$line" ]]; do
if grep -q $line "$LOGFILE"; then
alert=1
error="${error};${line}"
fi
done < errors.lst
echo $alert
echo $error
我期待以下输出:
;ORA-03113;ORA-00933
但我的输出低于:
;ORA-00933
你能帮帮我吗,我哪里做错了。
您的文件似乎包含 \r
(回车符 return,ASCII
0xd).当您的终端模拟器看到它时,它会删除所有它
到目前为止已经显示并移动到该行的开头。这些
carriage return 字符最常来自 Windows-style 行
结局。 运行 dos2unix
删除输入文件:
dos2unix log.txt errors.lst
我有下面的 while 循环,它逐行读取文件中的错误代码,如果在 log.txt 文件中找到此错误代码,那么我需要设置 alert=1 然后写入这些错误shell 变量,用分号连接它们。但是当我在下面写 while 循环时,它没有给出预期的结果。
log.txt文件数据:
ORA-03113
ORA-00933
errors.lst 文件数据:
ORA-03113
ORA-00933
错误
export LOGFILE=/temp/log.txt
alert=0
error=""
while IFS= read -r line || [[ -n "$line" ]]; do
if grep -q $line "$LOGFILE"; then
alert=1
error="${error};${line}"
fi
done < errors.lst
echo $alert
echo $error
我期待以下输出:
;ORA-03113;ORA-00933
但我的输出低于:
;ORA-00933
你能帮帮我吗,我哪里做错了。
您的文件似乎包含 \r
(回车符 return,ASCII
0xd).当您的终端模拟器看到它时,它会删除所有它
到目前为止已经显示并移动到该行的开头。这些
carriage return 字符最常来自 Windows-style 行
结局。 运行 dos2unix
删除输入文件:
dos2unix log.txt errors.lst