考虑一下情况:
脚本文件: 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