テストが失敗した場合は、すべての添字を停止します。

テストが失敗した場合は、すべての添字を停止します。

状況を考えてください。

スクリプトファイル: main.shsub1.shそしてsub2.sh

と。mainを呼び出したら、以下を使用してフォルダ内のすべてのファイルを実行します。sub1sub2mainfor

for file in samples/*.jpg; do bash ./main.sh $file; done

そしてそれは素晴らしい作品です。

しかし、いくつかの値を計算していますが、テストが失敗した場合は、現在の実行を停止してループ内の次のファイルから再起動したいとsub1思います。main$filemain

たとえば、フォルダにjpgファイルが含まれていて01,...,09そのファイルのテストが失敗した場合は、forを停止し、forをスキップし、残りのforを停止してforを起動します。sub104sub104sub204main04main05

テストは次のとおりです。

if (( $numcc % 3 == 0 ))
then
    ...
else
    ...
fi

答え1

main.sh以下に3つのサンプルスクリプト、およびを示しますsub1.shsub2.sh投稿に記載されているとおりに電話してください。 for file in samples/*.jpg; do bash ./main.sh $file; done

デフォルトのアイデアは、sub1.shテストが失敗した場合に一時ファイルが生成され、sub2.shファイルが存在することを確認することです。最後に、main.shロックファイルは他の2つのスクリプトを呼び出すたびに削除されます。これはいいえ一時ファイルを処理するのに推奨される方法ですが、使用方法を説明するだけです。

テストをシミュレートするために、任意の整数が偶数であることを確認しました。実際のテスト条件をそこに変えてください。

コンテンツmain.sh:

#!/bin/bash

export LOCK_FILE=sub1_failed.txt

echo "$0 $1"

[ -f "$LOCK_FILE" ] && rm "$LOCK_FILE"

bash ./sub1.sh "$1"
bash ./sub2.sh "$1"

コンテンツsub1.sh:

#!/bin/bash

echo "$0 $1"

if (( $RANDOM % 2 == 0 ))
then
    # Test failed
    echo "> $0 failed: Creating $LOCK_FILE ..."
    touch "$LOCK_FILE"
else
    # Test successful
    :
fi

コンテンツsub2.sh:

#!/bin/bash

echo "$0 $1"

if [ -f "$LOCK_FILE" ]
then
    echo 'Skipping sub2.sh'
    exit 1

else
    echo 'Executing sub2.sh as usual'
fi

echo 'sub2.sh done'
echo ''

実行インスタンスの1つのサンプル出力は次のとおりです。の性質上、上記の$RANDOMコードを実行するたびに出力が異なります。

./main.sh samples/01.jpg
./sub1.sh samples/01.jpg
> ./sub1.sh failed: Creating sub1_failed.txt ...
./sub2.sh samples/01.jpg
Skipping sub2.sh
./main.sh samples/02.jpg
./sub1.sh samples/02.jpg
> ./sub1.sh failed: Creating sub1_failed.txt ...
./sub2.sh samples/02.jpg
Skipping sub2.sh
./main.sh samples/03.jpg
./sub1.sh samples/03.jpg
./sub2.sh samples/03.jpg
Executing sub2.sh as usual
sub2.sh done

./main.sh samples/04.jpg
./sub1.sh samples/04.jpg
> ./sub1.sh failed: Creating sub1_failed.txt ...
./sub2.sh samples/04.jpg
Skipping sub2.sh
./main.sh samples/05.jpg
./sub1.sh samples/05.jpg
./sub2.sh samples/05.jpg
Executing sub2.sh as usual
sub2.sh done

関連情報