使用 if/then 语句时出现问题:`((: == : 语法错误:预期操作数(错误标记是“==”)`

使用 if/then 语句时出现问题:`((: == : 语法错误:预期操作数(错误标记是“==”)`

我尝试在 bash 脚本中实现位置参数并检查它们,但遇到了一些问题如果/那么switch 语句。

脚本:

#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在这种情况下,如何正确实施操作员?

答案1

(( ... ))用于算术评估。

您应该使用[ ... ](就像在while条件中所做的那样)或 bash 的扩展测试语法[[ ... ]]- 并记得引用“$query”并在[and]运算符周围留出空格:

if [ "$query" == "" ]

或者,使用-z空字符串测试:

if [ -z "$query" ]

如需有关此类问题的一般帮助,请尝试www.shellcheck.netshellcheck或从存储库安装该包universe

相关内容