Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本返回语法错误:表达式中出现语法错误(错误标记为…)_Bash_Syntax Error - Fatal编程技术网

Bash脚本返回语法错误:表达式中出现语法错误(错误标记为…)

Bash脚本返回语法错误:表达式中出现语法错误(错误标记为…),bash,syntax-error,Bash,Syntax Error,我想启动一组特定的服务(在下面的示例中,该服务称为users),在我的脚本中,它正在工作。但是,我在运行命令时看到以下错误: ./services.sh: line 40: [[: start users: syntax error in expression (error token is "users") 我使用脚本中的case语句调用此命令,该语句查找start参数: case "$1" in (-h) display_help e

我想启动一组特定的服务(在下面的示例中,该服务称为users),在我的脚本中,它正在工作。但是,我在运行命令时看到以下错误:

./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()
{
    # 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
正如我提到的,脚本正在做我想做的事情,但是我一直得到语法表达式错误


你知道为什么会这样吗?提前谢谢

$@
似乎包含了您的服务名称,但在
中,如果您尝试对它们进行计数。使用
$#
而不是
$@

$@
似乎包含您的服务名称,但在
中,如果您尝试计数它们,则使用
$
。使用
$\code>而不是
$@

试试:

if [[ -z "$@" ]]

  • -z
    :检查无零字符串;比数一数有多少物品要快
  • 尝试:


  • -z
    :检查无零字符串;比数一数有多少物品要快

  • 您的意思是
    $\code>而不是
    $@
    ?问题是用于检查参数的构造不正确,该参数必须是
    $
    。您看到的错误是由于未加引号的
    $@
    导致
    [
    运算符的操作数不正确。始终对算术上下文使用
    $(..)
    ,即
    if(($)==2))
    我在您的第一个代码块、键入或错误中没有看到结束符
    esac
    )-祝您好运。您的意思是
    $#
    而不是
    $@
    ?问题是用于检查参数的结构不正确,参数必须是
    $
    。您看到的错误是因为未引用的
    $@
    导致了错误的数字对
    [[
    运算符的操作数。始终对算术上下文使用
    $(..)
    ,即
    如果($#==2))
    我在第一个代码块中没有看到结束
    esac
    ,输入错误或错误?;-)祝您好运。