有没有办法在循环中发送多个sqlplus命令但等待一个成功运行才能启动下一个? 这是我的代码示例。我试图添加睡眠15,因为我要执行的功能需要10-20秒才能运行。我想摆脱15s常数并让它们一个接一个地运行。
if [ "$#" -eq 1 ]; then
checkUser "$1"
while read line; do
sqlplus $user/$pass@$server $line
sleep 15
done < "$wrapperList"
fi
答案 0 :(得分:1)
while
循环中的指令按顺序完成。使用;
链接指令等同于这样做:
sqlplus $user/$pass@$server $line1
sqlplus $user/$pass@$server $line2
所以这里不需要sleep 15
,因为sqlplus
命令不会并行调用。你这样做的方式是一个接一个地调用它们。
Nota:如果第一行没有正确返回,最好停止运行,使用&&
说:仅在前一个返回码为0
时运行
sqlplus $user/$pass@$server $line1 &&\
sqlplus $user/$pass@$server $line2
要在while循环中使用它:
checkUser "$1"
while read line; do
sqlplus $user/$pass@$server $line
RET_CODE=$? # check return code, and break if not ok.
if [ ${RET_CODE} != 0 ]; then
echo "aborted." ; break
fi
done < "$wrapperList"
另一方面,当您想要并行运行时,语法会有所不同,例如:Unix shell script run SQL scripts in parallel