Недопустимый вывод и цикл не нарушают этот код 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
0
задан 7 February 2018 в 22:20

2 ответа

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
3
ответ дан 17 July 2018 в 21:21

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
3
ответ дан 23 July 2018 в 22:00

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

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