Saída e loop inválidos não estão quebrando neste código bash

0

Eu escrevi este script simples para verificar se algumas das portas específicas estão abertas ou não.

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

Ele deve percorrer a lista de portas e imprimir a primeira porta aberta e, em seguida, interromper o loop. Exceto 8080 todas as outras portas estão abertas no meu sistema e devem, em teoria, emitir succeeded 22 . Mas em vez de fazer isso, esta é a saída que está dando

nc: port number invalid: 8080,22,53
refused
    
por Eka 07.02.2018 / 19:20

1 resposta

3

man bash diz:

% bl0ck_qu0te%

Então, para preencher sua matriz, você deve fazer:

prt=(8080 22 53)

Eu faria a tarefa da seguinte forma:

#!/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
    
por dessert 07.02.2018 / 19:27