Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash在成功执行“ping”命令后转换我的ping命令;“直到循环”;_Bash - Fatal编程技术网

Bash在成功执行“ping”命令后转换我的ping命令;“直到循环”;

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

我试图制作一个脚本,不断尝试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退出,我的直到条件是否写入错误?

$(…任何…
扩展到命令
…任何…
输出

因此,如果
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))
是一个较短的增量。谢谢,它可以工作。我不熟悉这部电影。不知怎的,我看到了,但用错了。谢谢,它很管用。我不熟悉这部电影。不知怎的,我看到了,但用错了。