Я записал этот простой сценарий, чтобы проверить, открыты ли некоторые определенные порты или нет.
#!/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
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