Почему я получаю эти ошибки в этом скрипте bash? - PullRequest
1 голос
/ 25 мая 2019

Я пытаюсь написать подсистему ping для bash и получаю два сообщения об ошибке.

Первое:

./pingsweep.sh: line 2: [192.168.199.182: command not found

Второй

ping: 192.168.199.182.seq: Name or service not known.

Я не могу определить ошибку из исходного кода:

#!/bin/bash
if ["$1" == ""]
then
    echo "Usages:./pingsweep.sh [network]"
    echo "Example: ./pingsweep.sh 192.168.199"
else
    for ip in 'seq 1 254'; do
        ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | sed 's/.$//'&
    done
fi

1 Ответ

2 голосов
/ 25 мая 2019

Ваш сегмент ["$1" создает одиночное слово, начинающееся с [ и заканчивающееся тем, что вы передали в качестве первого аргумента.Поскольку это не одна из встроенных команд bash (например, [), он пытается запустить ее как команду и завершается неудачно:

./pingsweep.sh: line 2: [192.168.199.182: command not found
                        ^^^^^^^^^^^^^^^^
                        |
                        +--> see *especially* this first character.

Вам нужен пробел между [ и переменной, и передзакрытие ] также.Даже если это не было необходимым для синтаксиса, это потребовалось бы для моих чувствительности ОКР: -)

if [ "$1" == "" ]

Кроме того, команда for ip in 'seq 1 254' (обратите внимание на одинарные кавычки) будетВыполните итерацию по одной строке seq 1 254, , а не , запустите команду и выполните итерацию по ее выводу.Для этого вам нужно использовать обратные кавычки (`), а не кавычки, или мои предпочтения, поскольку их легче вкладывать:

for ip in $(seq 1 254)

Но вы должны иметь в виду, что bash на самом деле имеет приличныйпетли без необходимости прибегать к seq:

for (( ip=1; ip<10; ip++ )); do echo $ip; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...