상황을 고려하십시오.
스크립트 파일: main.sh
, sub1.sh
그리고 sub2.sh
.
및 . main
을 호출 한 후 다음을 사용하여 폴더의 모든 파일을 실행합니다 .sub1
sub2
main
for
for file in samples/*.jpg; do bash ./main.sh $file; done
그리고 그것은 훌륭하게 작동합니다.
하지만 일부 값을 계산하고 있는데 테스트가 실패하면 현재 실행을 중지하고 루프의 다음 파일부터 다시 시작하고 sub1
싶습니다 .main
$file
main
예를 들어 폴더에 jpg 파일이 포함되어 있고 01,...,09
해당 파일에 대한 테스트가 실패하면 for를 중지하고 for를 건너뛰고 나머지 for를 중지하고 for를 시작합니다.sub1
04
sub1
04
sub2
04
main
04
main
05
테스트는 다음과 같습니다.
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