ars*_*nal 3 unix linux bash shell
问题陈述:-
我有四个shell脚本,只有在前一个脚本成功执行后才能执行.而我现在正在运行它 -
./verify-export-realtime.sh
sh -x lca_query.sh
sh -x liv_query.sh
sh -x lqu_query.sh
Run Code Online (Sandbox Code Playgroud)
因此,为了使其他脚本在上一个脚本成功之后运行.我需要做类似下面的事情吗?我不确定我是对的吗?如果任何脚本由于任何原因而失败,由于某种原因它会打印为失败 吗?
./verify-export-realtime.sh
RET_VAL_STATUS=$?
echo $RET_VAL_STATUS
if [ $RET_VAL_STATUS -ne 0 ]; then
echo "Failed due to some reason"
exit
fi
sh -x lca_query.sh
RET_VAL_STATUS=$?
echo $RET_VAL_STATUS
if [ $RET_VAL_STATUS -ne 0 ]; then
echo "Failed due to some reason"
exit
fi
sh -x liv_query.sh
RET_VAL_STATUS=$?
echo $RET_VAL_STATUS
if [ $RET_VAL_STATUS -ne 0 ]; then
echo "Failed due to some reason"
exit
fi
sh -x lqu_query.sh
Run Code Online (Sandbox Code Playgroud)
shell为操作员提供了&&这样做.所以你可以写:
./verify-export-realtime.sh && \
sh -x lca_query.sh && \
sh -x liv_query.sh && \
sh -x lqu_query.sh
Run Code Online (Sandbox Code Playgroud)
或者你可以摆脱行continuation(\)并将其全部写在一行上
./verify-export-realtime.sh && sh -x lca_query.sh && sh -x liv_query.sh && sh -x lqu_query.sh
Run Code Online (Sandbox Code Playgroud)
如果你想知道它有多远,你可以添加仅设置变量的额外命令:
done=0
./verify-export-realtime.sh && done=1 &&
sh -x lca_query.sh && done=2 &&
sh -x liv_query.sh && done=3 &&
sh -x lqu_query.sh && done=4
Run Code Online (Sandbox Code Playgroud)
最后的值$done告诉您成功完成了多少命令. $?将被设置为上次命令运行的退出值(失败的那个),或者0如果全部成功