2011-11-05 87 views
2

我正在尝试写一个简单的bash脚本。它只是根据满足的条件展示几行。我陷入了if-else的状况,似乎无法找到出路。意外令牌附近的语法错误 - bash

下面是代码:

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条件中的不同括号,但他们也没有工作。

回答

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

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

括号执行其内容的子shell,这不是你想要的,和字符串与单个=比较。

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

请注意,如果你想在未来比较数字,使用-eq代替=

编辑:测试,我发现==作品,但没有在手册页中提到他们;它可能是bash内置版本的扩展。如果你想成为便携式的,我会坚持=

+0

对于严格的POSIX合规性,'='是需要的,但是'=='也可以。谢谢回复!! – Sriram

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

相关问题