ループ内のすべてのエラーの後にスクリプトを失敗させる

ループ内のすべてのエラーの後にスクリプトを失敗させる

スクリプトが失敗した場合に備えて、条件付き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行ずつ読み、各パターンに順番に適用しますgrepabc.txtパターンが一致しない場合、変数はfail文字列に設定されます(最初から文字列に設定されました)truefalse

ループの後、$failコマンドと実行として使用され、isexit 1またはに従って0以外の終了状態でスクリプトを終了します。failtruefalse

コマンドの出力はgrep標準出力に書き込まれます。私の考えでは、これがあなたが望むものです。それ以外の場合は、一致しないパターンを見つけた後にすべてのパターンをテストする必要はありません。

関連情報