我编写了这个简单的脚本来检查某些特定端口是否打开。
#!/bin/bash
prt=(8080,22,53)
for i in "${prt[@]}"
do
nc -vz 127.0.0.1 $i
if [ $? -eq 0 ]; then
echo "succeeded"
echo $i
break
else
echo "refused"
fi
done
它应该循环遍历端口列表并打印第一个打开的端口,然后退出循环。除了 8080 之外,我的系统中所有其他端口都是打开的,理论上应该输出succeeded 22
。但是它并没有这样做,而是给出了以下输出
nc: port number invalid: 8080,22,53
refused
答案1
man bash
说:
使用形式为 name=(value 1 ... value n ) 的复合赋值来对数组进行赋值,其中每个值的形式为 [subscript]=string。
因此,要填充数组,您应该执行以下操作:
prt=(8080 22 53)
我将按如下方式完成任务:
#!/bin/bash
prt=(8080 22 53)
for i in "${prt[@]}"; do
if nc -vz 127.0.0.1 $i; then
echo -e succeeded\\n$i
break
else
echo refused
fi
done