意外令牌附近的语法错误 - bash

时间:2011-11-05 13:33:55

标签: bash shell

我正在尝试编写一个简单的bash脚本。它只是根据满足的条件提出几行。我陷入if-else状态,似乎无法找到出路。

以下是代码:

if [ ( "${MODE}" == "top10gainers" ) || ( "${MODE}" == "top10losers" ) ]; then
  echo "Top Gainers"
elif [ "${MODE}" == "solo" ]; then
     echo "Going solo"
fi

我得到的错误是:

syntax error near unexpected token `"${MODE}"'
`if [ ( "${MODE}" == "top10gainers" ) || ( "${MODE}" == "top10losers" ) ]; then'

我用Google搜索并试图搜索论坛(包括SO),但没有找到解决方案。我也在OR条件下尝试了不同的括号,但它们也没有用过。

3 个答案:

答案 0 :(得分:4)

[ "${MODE}" == "top10gainers" ] || [ "${MODE}" == "top10losers" ]

[ "${MODE}" == "top10gainers" -o "${MODE}" == "top10losers" ]

答案 1 :(得分:1)

括号在子shell中执行它们的内容,这不是你想要的,并且字符串与单个=进行比较。

if [ "${MODE}" = "top10gainers" ] || [ "${MODE}" = "top10losers" ]; then
  echo "Top Gainers"
elif [ "${MODE}" = "solo" ]; then
     echo "Going solo"
fi

请注意,如果您希望以后比较数字,请使用-eq代替=

编辑:测试,我发现==也有效,但在手册页中没有提到它们;它可能是bash内置版本的扩展。如果你想要随身携带,我会坚持=

答案 2 :(得分:1)

另一个选择,如果你明确使用bash(即以#!/bin/bash而不是#!/bin/sh开头)是使用bash的内置[[命令,如下所示:

if [[ ${MODE} == top10gainers || ${MODE} == top10loser ]]; then
    echo "Top Gainers"
elif [[ ${MODE} == solo ]]; then
    echo "Going solo"
fi

请注意,与[[[不同,test不需要引用可能包含空格的变量。