返回语法错误的Bash脚本:表达式中的语法错误(错误标记为...)

时间:2018-01-17 14:25:29

标签: bash syntax-error

我想启动一组特定的服务(在下面的示例中,该服务称为用户),并且在我的脚本中,这是有效的。但是,我在运行命令时看到以下错误:

./services.sh: line 40: [[: start users: syntax error in expression (error token is "users")

我在脚本中使用case语句调用此命令,该语句查找start参数:

case "$1" in
    (-h)
            display_help
            exit 0
            ;;
    (start)
            start_services "$@"
            ;;

start_services的功能如下:

start_services()
{
    # Check to see if there are any arguments, if not, start all services
    if [[ $@ -eq 0 ]]; then
            echo
            echo "Starting all services:"
            echo "======================"
            for svc in $services
            do
                    echo "     Starting the $svc service... "
                    $SVCPATH/bin/$svc &
            done

    else
            shift;
            echo
            for var in "$@"
            do
                    echo "Starting the $var service... "
                    $SVCPATH/bin/$var & > /dev/null
            done
    fi
}

所以,失败发生在这一行,第40行:

if [[ $@ -eq 0 ]]; then

正如我所提到的,脚本正在按照我的意愿行事,但我不断收到语法表达式错误。

关于为什么会发生这种情况的任何想法?提前谢谢!

2 个答案:

答案 0 :(得分:3)

$@似乎包含您的服务名称,但在if中您尝试计算它们。使用$#代替$@

答案 1 :(得分:0)

尝试:

if [[ -z "$@" ]]
  1. -z:检查无零字符串;比计算那里有多少项更快