Я написал этот простой скрипт, чтобы проверить, открыты ли некоторые из определенных портов или нет.
#!/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
man bash говорит:
Массивы назначаются для использования составных присвоений формы name = (value1 ... valuen), где каждое значение имеет форму [индекс] = строка.Чтобы заполнить ваш массив, вы должны сделать следующее:
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
man bash говорит:
Массивы назначаются для использования составных присвоений формы name = (value1 ... valuen), где каждое значение имеет форму [индекс] = строка.Чтобы заполнить ваш массив, вы должны сделать следующее:
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