我正在尝试编写一个简单的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
条件下尝试了不同的括号,但它们也没有用过。
答案 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
不需要引用可能包含空格的变量。