循环中出现所有错误后使脚本失败

循环中出现所有错误后使脚本失败

我在脚本失败的情况下使用了条件 if-else $? -ne 0 但我正在其中运行循环。我想要的是我的脚本在所有检查完成后失败。一次检查后就失败了。下面是我的脚本

for i in `cat xyz.txt`
do
grep $i abc.txt
    if [[ $? -ne 0 ]]; then
    echo $i "is missing in the file abc.txt"
    exit -1
    fi
done

答案1

设置循环后失败提醒:

#!/bin/sh

fail=false
while IFS= read -r pattern; do
    if ! grep -e "$pattern" abc.txt; then
        fail=true
    fi
done <xyz.txt

"$fail" && exit 1

这会xyz.txt逐行读取模式并依次应用于每个模式grepabc.txt如果模式无法匹配,则变量fail将设置为字符串(从一开始就设置为字符串)truefalse

循环之后,$fail用作命令并exit 1运行以非零退出状态终止脚本,具体取决于failistruefalse

该命令的输出grep被写入标准输出,我认为这是您想要的,否则在找到不匹配的模式后测试所有模式是没有意义的。

相关内容