Проблема с использованием условного оператора: '((: ==: синтаксическая ошибка: операнд ожидал (ошибочный маркер “==”)'

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

Сценарий:

#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 оператор в этом случае?

0
задан 15 November 2018 в 19:29

1 ответ

(( ... )) для арифметической оценки.

Вы должны использовать [ ... ] (как вы это делали в условии while) или расширенный тестовый синтаксис bash [[ ... ]] - и не забывать заключать в кавычки «$ query» и оставлять пробелы вокруг [ и ] операторы:

if [ "$query" == "" ]

Либо используйте тест пустой строки -z:

if [ -z "$query" ]

Для получения общей справки по таким вопросам, попробуйте www.shellcheck. net или установите пакет shellcheck из репозитория universe.

2
ответ дан 27 October 2019 в 04:35

Другие вопросы по тегам:

Похожие вопросы: