2017-02-21 27 views
1

Я использую команду nc в своем Linux-боксе, как показано ниже, чтобы проверить, прослушивает порт;Как отобразить возвращаемое значение nc в скрипте оболочки Linux?

Это отображает сообщение об успешном:

nc -z 192.168.0.2 9000 

Это показывает 0:

echo $? 

Я объединил это в сценарий оболочки .sh файл, как показано ниже;

#!/bin/sh 
nc -z 192.168.0.2 9000 
echo $? 

Это показывает 1 вместо ожидаемого 0. Опять же, если я изменяю свой скрипт, как показано ниже, он работает;

#!/bin/sh 
echo nc -z 192.168.0.2 9000 
echo $? 

Но здесь проблема в том, что она отображает сообщение об успешном завершении на одном, а затем отображает 0 в следующей строке. Я не хочу сообщения об успехе, и я ожидаю 0. Что здесь не так и как я могу это исправить?

+0

http://stackoverflow.com/questions/4922943/test-from-shell-script-if-remote-tcp-port-is-open – Dan

ответ

0

Ваш скрипт работает так, как ожидалось для меня. (с помощью пс 0.7.1 и 4.4.12 ш)

И, в командной строке, а также сценарии с использованием #!/bin/sh

Только ваш последний вариант - echo nc -z 192.168.0.2 9000 - не выполняет пс на всех, но только эхо его вне. Попробуйте заменить nc на что угодно, например. ncc-1701, и вы увидите, что я имею в виду.

1

Этот небольшой скрипт должен сделать трюк:

#!/bin/bash 
SERVER=$1 
PORT=$2 
nc -z -v -G5 $SERVER $PORT &> /dev/null 
result1=$? 

#Do whatever you want 

if [ "$result1" != 0 ]; then 
    echo port $PORT is closed on $SERVER 
else 
    echo port $PORT is open on $SERVER 
fi 

Использование:

./myscript.sh servername portnumber 

Например:

./myscript www.google.com 80 
www.google.com 80 
port 80 is open on www.google.com 

В зависимости от версии нк вы используете, вы может потребоваться настроить -G на -w, поэтому экспериментируйте и найдите, что лучше всего подходит для вас.