[英]How to use the exit code of netcat command in a if condition?
我在bash中具有此功能,该功能使用netcat来检查端口是否在地址上打开。 例如,我正在使用localhost 3000进行测试。
错误
我无法通过运行nc
获取错误代码。 我不断看到消息:
nc_output:预期为整数表达式
从if条件。 (请参见下面的代码)
码
#!/bin/bash
set -o nounset
scan() {
local host=$1
local port=$2
local nc_output
nc_output=$(nc ${host} ${port} -w 5)
eval ${nc_output}
if [ nc_output -ne 0 ]; then
"PORT ${port} CLOSED on ${host}"
else
echo "PORT ${port} OPEN on ${host}"
fi
}
scan 127.0.0.1 3000
我认为问题归结于如何将nc
命令存储在变量中以便稍后进行eval
。 当你做了
nc_output=$(nc ${host} ${port} -w 5)
# ^^ ^
标记的语法$(..)
用于bash
命令替换,该命令在内部运行命令并将命令的输出存储在使用的变量中。 因此,以上行运行nc
命令,并将返回的输出存储在变量nc_output
。 还记得这只存储命令的标准输出, 而不存储应该从变量$?
获取的nc
命令的返回码$?
我猜想您的意图是将命令存储在变量中,然后eval
一次并获取退出代码,但是通过eval
nc
命令返回的输出是round回的和不必要的,您做错了。
理想的方法应该是
nc "${host}" "${port}" -w 5
nc_exit_code=$?
并在条件中使用此变量
if [ "$nc_exit_code" -ne 0 ]; then
请注意, $
前缀在变量名之前。 您需要使用$var
语法在shell语法中访问标识符var
的值。 您没有在原始帖子中使用该符号。 否则,会将文字字符串nc_output
与0
进行比较,这没有意义,因为两者的本机类型互不相同。
同样,将退出代码明确地存储在变量中也是多余的, if
条件直接在返回命令的退出代码上起作用,那么
if ! nc "${host}" "${port}" -w 5; then
echo "PORT ${port} CLOSED on ${host}"
else
echo "PORT ${port} OPEN on ${host}"
fi
应该足以满足您的逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.