테스트가 실패하면 모든 첨자를 중지합니다.

테스트가 실패하면 모든 첨자를 중지합니다.

상황을 고려하십시오.

스크립트 파일: main.sh, sub1.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아래에는 세 가지 예제 스크립트 , 및 가 나와 있습니다 sub1.sh. sub2.sh게시물에 언급된 대로 전화하세요. for file in samples/*.jpg; do bash ./main.sh $file; done

기본 아이디어는 sub1.sh테스트가 실패하면 임시 파일이 생성되고 sub2.sh파일이 존재하는지 확인하는 것입니다. 마지막으로 main.sh잠금 파일은 다른 두 스크립트를 호출할 때마다 삭제됩니다. 이는아니요임시 파일을 처리하는 데 권장되는 방법이지만 단지 사용법을 설명하기 위한 것입니다.

테스트를 시뮬레이션하기 위해 임의의 정수가 짝수인지 확인했습니다. 실제 테스트 조건을 그곳으로 바꾸십시오.

콘텐츠 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 ''

실행 인스턴스 중 하나의 샘플 출력은 다음과 같습니다. 의 특성상 $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

관련 정보