我正在尝试创建一个脚本,该脚本不断尝试对域进行ping操作,直到该域变为可用为止。我的目标是在超过所有重试次数后,成功时返回0,失败时返回1。
这是脚本:
#! /bin/bash
attempt_counter=0
max_attempts=20
until $(ping -c 1 "$1"); do
if [ ${attempt_counter} -eq ${max_attempts} ];then
echo "Max attempts reached"
exit 1
fi
printf '.'
attempt_counter=$(($attempt_counter+1))
sleep 5
done
但是,只要ping成功,就不会出现退出 ,而是显示一个奇怪的错误:
/var/opt/openvpn/wait-on-ping.sh some.domain
ping: unknown host some.domain
.
ping: unknown host some.domain
.
######## AS THIS POINT DOMAIN IS REACHABLE ########
/var/opt/wait-on-ping.sh: line 6: PING: command not found
自从ping成功后以0退出后,我的直到条件是否写错了?
答案 0 :(得分:2)
$(...anything...)
扩展为命令...anything...
的输出。
因此,如果ping
在其stdout上发出一个以单词PING
开头的字符串,那么$(ping)
将尝试运行PING
-该输出-为命令。 (相反,var=$(ping)
会将输出分配给变量,或者[ -n "$(ping)" ]
将测试该输出是否为空)。
如果您不希望出现这种情况,请取出命令替换:您的代码应为:
until ping -c 1 "$1"
...不涉及{{1}}。