スクリプトが失敗した場合に備えて、条件付きif-else $? -ne 0 を使用していますが、内部でループが実行されます。私が望むのは、すべてのチェックが完了した後にスクリプトが失敗することです。 1回の確認後に失敗しました。以下は私のスクリプトです
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
パターンを1行ずつ読み、各パターンに順番に適用しますgrep
。abc.txt
パターンが一致しない場合、変数はfail
文字列に設定されます(最初から文字列に設定されました)true
。false
ループの後、$fail
コマンドと実行として使用され、isexit 1
またはに従って0以外の終了状態でスクリプトを終了します。fail
true
false
コマンドの出力はgrep
標準出力に書き込まれます。私の考えでは、これがあなたが望むものです。それ以外の場合は、一致しないパターンを見つけた後にすべてのパターンをテストする必要はありません。