Недопустимый вывод и цикл не прерывают этот код удара

Я записал этот простой сценарий, чтобы проверить, открыты ли некоторые определенные порты или нет.

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

Это должно циклично выполниться через список портов и распечатать первый открытый порт и затем повредиться от цикла. Кроме 8 080 всех других портов открыты в моей системе и если в выводе теории succeeded 22. Но вместо того, чтобы делать это это - вывод его предоставление

nc: port number invalid: 8080,22,53
refused
0
задан 7 February 2018 в 11:20

1 ответ

man bash говорит:

Массивы присвоены использованию составных присвоений имени формы = (value1... valuen), где каждое значение имеет форму [нижний индекс] =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
3
ответ дан 31 October 2019 в 01:37

Другие вопросы по тегам:

Похожие вопросы: