我的任务是创建相当复杂的bash脚本,第一部分是检查与主机的连接:带有telnet的端口,如果telnet将失败或不会安装,请使用netcat尝试连接。
我对循环有问题,如果telnet连接到主机,它将跳过netcat,如果- telnet和netcat都失败,脚本将以错误消息结束。剧本:
#!/bin/bash
echo Type host IP address
read REMOTEHOST
echo Type port number
read REMOTEPORT
TIMEOUT=5
echo quit | timeout --signal=9 5 telnet $REMOTEHOST $REMOTEPORT
if nc -w $TIMEOUT -z $REMOTEHOST $REMOTEPORT; then
echo "I was able to connect to ${REMOTEHOST}:${REMOTEPORT}"
else
echo "Connection to ${REMOTEHOST}:${REMOTEPORT} failed. Exit code from Netcat was ($?)."
fi发布于 2022-08-19 12:48:28
你能用$吗?变量从最后一个命令中获取退出代码。
我发现您的原始telnet命令在我的系统中退出时带有错误代码1,因为转义字符是^]。当我手动telnet时,我需要按ctrl-]才能输入telnet提示符,然后输入‘退出’。
这里的诀窍是你不能只键入^],你必须输入ctrl-v ctrl-]
ctrl-v告诉系统捕获下一个ctrl字符。
下面给出的退出代码为0,您可以通过使用echo $手动运行它来验证吗?在命令行
-记得使用ctrl-v ctr]
$ (echo ^]; echo quit) | timeout --signal=9 5 telnet <REMOTEHOST> <REMOTEPORT>
$ echo $?然后,您可以在脚本中使用以下内容:
#!/bin/bash
echo Type host IP address
read REMOTEHOST
echo Type port number
read REMOTEPORT
TIMEOUT=5
(echo ^]; echo quit) | timeout --signal=9 5 telnet $REMOTEHOST $REMOTEPORT > /dev/null 2>&1
TELNET_EXIT_CODE=$?
if [[ $TELNET_EXIT_CODE -ne 0 ]]; then
nc -w $TIMEOUT -z $REMOTEHOST $REMOTEPORT > /dev/null 2>&1
NC_EXIT_CODE=$?
fi
if [[ $TELNET_EXIT_CODE -eq 0 ]] || [[ $NC_EXIT_CODE -eq 0 ]]; then
echo "success"
else
echo "fail"
fi在Ubuntu 20.04.04、GNU bash版本5.0.17、Telnet版本0.17-41上进行测试
https://stackoverflow.com/questions/73415995
复制相似问题