Я пытаюсь реализовать позиционные параметры в сценарии удара и проверить их, но иметь некоторую проблему в если/затем оператор переключения.
Сценарий:
#set "default" parameter
query=""
while [ "$1" != "" ]; do
case $1 in
-q | --query ) shift
query=$1
;;
esac
shift
done
#query cannot be empty
if (($query == ""))
then
echo 'no query'
exit
fi
echo "query - $query"
Все работы хорошо, когда я установил корректные параметры:
$ ./script.sh -q request
query - request
-q
параметр не может быть пустым, и я должен проверить его. Так, когда командная строка похожа:
$ ./script.sh -q
или
$ ./script.sh
Я получаю эту ошибку:
./main.sh: line 13: ((: == : syntax error: operand expected (error token is "== ")
query -
Как правильно реализовать if
оператор в этом случае?
(( ... ))
для арифметической оценки.
Вы должны использовать [ ... ]
(как вы это делали в условии while
) или расширенный тестовый синтаксис bash [[ ... ]]
- и не забывать заключать в кавычки «$ query» и оставлять пробелы вокруг [
и ]
операторы:
if [ "$query" == "" ]
Либо используйте тест пустой строки -z
:
if [ -z "$query" ]
Для получения общей справки по таким вопросам, попробуйте www.shellcheck. net или установите пакет shellcheck
из репозитория universe
.