Bash在成功执行“ping”命令后转换我的ping命令;“直到循环”;
我试图制作一个脚本,不断尝试ping一个域,直到它变得可访问。我的目标是在超过所有重试尝试后,以0表示成功,1表示失败的方式退出 以下是脚本:Bash在成功执行“ping”命令后转换我的ping命令;“直到循环”;,bash,Bash,我试图制作一个脚本,不断尝试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
#! /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退出,我的直到条件是否写入错误?$(…任何…
扩展到命令…任何…
的输出
因此,如果ping
在其标准输出上发出一个以单词ping
开头的字符串,则$(ping)
将尝试作为命令运行ping
——该输出。(相比之下,var=$(ping)
将该输出分配给一个变量,或者[-n“$(ping)”]
将测试该输出是否为空)
如果不希望出现这种行为,请执行命令替换:您的代码应该是:
until ping -c 1 "$1"
…不涉及$()
。$(…任何…
扩展到命令…任何…
的输出
因此,如果ping
在其标准输出上发出一个以单词ping
开头的字符串,则$(ping)
将尝试作为命令运行ping
——该输出。(相比之下,var=$(ping)
将该输出分配给一个变量,或者[-n“$(ping)”]
将测试该输出是否为空)
如果不希望出现这种行为,请执行命令替换:您的代码应该是:
until ping -c 1 "$1"
…不涉及
$()
。怎么回事$()
?也就是说,在ping-c1“$1”之前,您的代码应该是;执行
,如果您不想将的输出ping到TTY,可以使用/dev/null或诸如此类的命令。顺便说一句,我还建议如果((尝试次数=最大尝试次数));然后
——如果你有一个bash-shebang,不妨利用它并使用C风格的数学。类似地,(++trunt\u counter))
是一个较短的增量。$()
是怎么回事?也就是说,在ping-c1“$1”之前,您的代码应该是;执行
,如果您不想将的输出ping到TTY,可以使用/dev/null或诸如此类的命令。顺便说一句,我还建议如果((尝试次数=最大尝试次数));然后
——如果你有一个bash-shebang,不妨利用它并使用C风格的数学。类似地,(++trunt\u counter))
是一个较短的增量。谢谢,它可以工作。我不熟悉这部电影。不知怎的,我看到了,但用错了。谢谢,它很管用。我不熟悉这部电影。不知怎的,我看到了,但用错了。