我在脚本失败的情况下使用了条件 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
逐行读取模式并依次应用于每个模式grep
。abc.txt
如果模式无法匹配,则变量fail
将设置为字符串(从一开始就设置为字符串)true
。false
循环之后,$fail
用作命令并exit 1
运行以非零退出状态终止脚本,具体取决于fail
istrue
或false
。
该命令的输出grep
被写入标准输出,我认为这是您想要的,否则在找到不匹配的模式后测试所有模式是没有意义的。