此 bash 代码中的无效输出和循环未中断

此 bash 代码中的无效输出和循环未中断

我编写了这个简单的脚本来检查某些特定端口是否打开。

#!/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

相关内容