elif
обычно используется для последовательности взаимоисключающих тестов.Проверка в elif
выполняется только в случае неудачи предыдущего теста if
или elif
.Вы не должны использовать его в своем скрипте, потому что если пользователь пропускает аргумент хоста, он также пропускает все следующие аргументы, и вам необходимо запросить каждый из них.Таким образом, вы должны сделать независимый тест для каждого.
Также нет необходимости проверять предыдущий аргумент.Вы проверяете его на предмет буквальной строки, но это не то, что пользователь собирается ввести.
На самом деле нет никакого смысла в этих MESSAGE#
переменных.Просто введите подсказку или используйте параметр -p
для read
.
Поскольку вы назначили именованные переменные всем параметрам в начале скрипта, вы должны использовать эти переменные в операторах if
Вместо $1
, $2
и т. д.
Вы можете упростить обработку опции -t
.Во-первых, вложите разные случаи в один тест, чтобы определить, является ли $1
-t
.Во-вторых, обратите внимание, что вы печатаете одно и то же сообщение для -gt 2
и -lt 2
;так что на самом деле есть только два случая: -eq 2
и все остальное.Так что вы можете просто использовать if
и else
.
if [[ "$host" = "" ]]; then
echo "please enter host"
read host
fi
if [[ "$startport" = "" ]]; then
echo "please enter startport"
read startport
fi
if [[ "$stopport" = "" ]]; then
echo "please enter stopport"
read stopport
fi
if [[ "$t" = "-t" ]]; then
if [[ "$numval" -eq 2 ]]; then
echo "time out is $numval"
else
echo "time out changed to $numval"
fi
fi