2014-08-28 4 views
1
#!/bin/bash 
# portcheck tool 

usage() 
{ 
    echo -e "\n USAGE: ./${0##*/} [host|ip] \n" 
    exit 
} 

check_port() 
{ 
    local host=${1} 
    local port=${2} 
    if [ nc -w 5 -z host port ] && [ nc -w 5 -z host port ] 
    then 
    echo -e "\a\n => Port ${port} at ${host} is open" 
    else 
    echo -e "\a\n => Port ${port} at ${host} is closed" 
    fi 
} 

[[ $# -ne 2 ]] && usage 

check_port ${1} ${2} 

Когда я запускаю следующую команду:Bash - [: слишком много аргументов

bash portOpenBash.sh 127.0.0.1 434 

Я получаю следующее сообщение об ошибке:

portOpenBash.sh: line 14: [: too many arguments 

Я пытаюсь поставить кавычки между макро выражения, но я получаю ту же ошибку.

ответ

1

Проблема, кажется, в ваших if условиях здесь:

if [ nc -w 5 -z host port ] && [ nc -w 5 -z host port ] 

Вы, вероятно, хотите, чтобы проверить, не пустой вывод обеих команд, как это:

if [ -n "$(nc -w 5 -z $host $port)" ] && [ -n "$(nc -w 5 -z $host $port)" ] 

ИЛИ в BASH:

if [[ -n "$(nc -w 5 -z $host $port)" && -n "$(nc -w 5 -z $host $port)" ]] 

EDIT:

или иначе, если вы просто хотите, чтобы проверить коды возврата затем удалить окружающие [ и ]:

if nc -w 5 -z $host $port && nc -w 5 -z $host $port 
+2

Я предполагаю, что он хочет вернуть проверки для тех, 'nc' код команды на самом деле. Итак, 'если nc -w 5 -z host port && nc -w 5 -z host port'. –

+0

Спасибо @EtanReisner: Я добавил это к моему ответу в случае, если OP этого захочет. – anubhava

+0

Спасибо, должно быть: если nc -w 5 -z $ host $ port && nc -w 5 -z $ host $ port –

Смежные вопросы