在if..else条件中使用迭代命令优化shell脚本代码

hxzsmxv2  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(116)

run.sh文件运行我的项目管道,它将产生成功的输出。但是如果它不起作用,我应该用相同的命令重新启动管道。
相反,我给予了要传入www.example.com文件的参数run.sh,该参数不是从失败的步骤开始的。

echo "Usage : file.sh step"

if [ "$step" = "" ]; then
     python -u -m utils.py
     python -u -m apple.py
     python -u -m banana.py
     python -u -m cat.py
     python -u -m dog.py
elif [ "$step" = "apple" ]; then
     python -u -m apple.py
     python -u -m banana.py
     python -u -m cat.py
     python -u -m dog.py
elif [ "$step" = "banana" ]; then
     python -u -m banana.py
     python -u -m cat.py
     python -u -m dog.py
elif [ "$step" = "cat" ]; then
     python -u -m cat.py
     python -u -m dog.py
elif [ "$step" = "dog" ]; then
     python -u -m dog.py
else 
    echo "Issue"
fi

命令执行上面的代码:run.sh

例如:run.sh“香蕉”

pokxtpni

pokxtpni1#

通常,在匹配单个字符串时(比如"$step"),你应该使用case而不是一系列if ... elif ...语句。因为在bashv4.0和更高版本中,您可以在子句之间使用;&来表示“也执行下一个子句(无论其模式是否匹配)"。类似于以下内容:

case "$step" in
    "")     python -u -m utils.py ;&
    apple)  python -u -m apple.py ;&
    banana) python -u -m banana.py ;&
    cat)    python -u -m cat.py ;&
    dog)    python -u -m dog.py ;;
    *)      echo "Issue" ;;
esac

因此,例如,如果"$step"是“apple”,它将执行apple案例,然后执行将通过bananacatdog案例。dog*案例之间的;;意味着它 * 不会 * 进入最终案例,并且最后的*将匹配任何内容(与前面的case不匹配的内容),因此它实际上像else子句一样工作。

相关问题