如果测试失败则停止所有下标

如果测试失败则停止所有下标

考虑一下情况:

脚本文件: main.shsub1.shsub2.sh

main我打电话sub1sub2.然后我使用以下命令运行main文件夹中的所有文件for

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.shsub1.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

相关内容