我在本地计算机上安装了 netcat,并在端口 25565 上运行了一个服务。使用以下命令:
nc 127.0.0.1 25565 < /dev/null; echo $?
Netcat 检查端口是否打开,如果打开则返回 0,如果关闭则返回 1。
我正在尝试编写一个 bash 脚本来无限循环并每秒执行上述命令,直到命令的输出等于 0(端口打开)。
我当前的脚本只是不断地循环“...”,即使在端口打开之后(1 变成 0)。
until [ "nc 127.0.0.1 25565 < /dev/null; echo $?" = "0" ]; do
echo "..."
sleep 1
done
echo "The command output changed!"
我在这里做错了什么?
把事情简单化
重击和其他sh贝壳提供了一个until ... do ... done loop https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_10:
until nc -z 127.0.0.1 25565
do
echo ...
sleep 1
done
只是让 shell 隐式处理退出状态
shell可以处理退出状态(记录在$?
)有两种方式,显式和隐式。
明确:status=$?
,这允许进一步处理。
隐式:
对于每一个陈述,在你的脑海,在命令中添加“成功”一词,然后添加if
, until
or while
围绕它们进行构建,直到该短语有意义为止。
until nc
succeeds; do ...; done
* Bash 手册:until ... do ... 循环 https://www.gnu.org/software/bash/manual/html_node/Looping-Constructs.html#index-until
The -z
选项将停止nc
从读取标准输入,所以没有必要< /dev/null
重定向。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)