我刚刚意识到,使用||
运算符作为检查来查看命令是否成功完成并不能处理||
.
这是我的脚本的一个发挥,我正在等待 ping 返回,如果在一定时间内没有返回,那么它应该运行两个命令(在真实的脚本中,有两个函数,一个用于清理,以及打印错误并退出的一个,我无法将它们组合起来)。
/bin/bash
echo "start"
timeout 10s bash -c 'until ping -w1 -c1 1.1.1.1 >/dev/null 2>&1; do :; done' || echo "unsuc"; exit 1
echo "suc"
exit 0
我的问题是,如果 ping 成功,则脚本只是exit 1
.我也尝试过这样做echo "unsuc" && exit 1
,但这会导致相同的行为。
如果 ping 命令失败,如何运行两个命令?
答案1
使用组命令(又名“列表”) - 例如... || { echo "unsuc" ; exit 1 ; }
。
查看man bash
并搜索该Compound Commands
部分。
或者,使用if
语句,例如:
#!/bin/bash
echo "start"
if ! timeout 10s bash -c 'until ping -w1 -c1 1.1.1.1 >/dev/null 2>&1; do :; done' ; then
echo "unsuc"
exit 1
fi
echo "suc"
exit 0