我有以下bash脚本文件callee.sh,它是从另一个脚本文件caller.sh调用的。
callee.sh如下:
if [ $1 -eq 1 ];
then
echo inside $1
source ~/MYPROGRAMSRC/standAloneWordCount.sh $2
#echo "inside standalone branch"
#echo $1
elif [ $1 -eq 2 ];
then
#echo "inside distributed branch"
#echo $1
else
echo invalid option for first argument-\n Options:\n "distributed"\n or\n "standalone"\n
fi
正如大多数人可能会说的那样,这是一个脚本,用于决定是否以分布式或独立模式运行hadoop,具体取决于参数。
此脚本从caller.sh调用,如下所示
source callee.sh $2 $counterGlobal
其中$ 2是1或2的数字,$ counterGlobal是某个整数。
我的问题是callee.sh中的if条件永远不会计算为True,因此我从来没有调用我在callee.sh中调用的脚本standAloneWordCount.sh。我正在使用bash shell运行并尝试了许多if语句的变体,如:
if [ $(($1 == 1 )) ] -- (1)
在行 - (1)之上的echo语句中,表达式$(($ 1 == 1))的计算结果为1,所以我感到困惑的是为什么我无法满足if条件。
此外,我一直收到错误信息:
syntax error near unexpected token `else'
如果有人能帮我解决这两个错误,我们将不胜感激。因为我已经没有想法了。
提前致谢!
答案 0 :(得分:1)
尝试了if语句的许多变体,如:
if [ $(($1 == 1 )) ]
你应该说:
if (($1 == 1)); then
...
fi
关于Syntax error near unexpected token
else',这不是因为您在上面显示的任何代码。它似乎源自您脚本的其他部分。
答案 1 :(得分:0)
如果您正在使用bash,请尝试使用双方括号:
if [[ $1 -eq 1 ]]; then
echo "inside 1"
fi
对于syntax error
,您需要在文本周围添加引号(这也意味着转义现有引号或使用单引号):
echo -e "invalid option for first argument-\n Options:\n \"distributed\"\n or\n \"standalone\"\n"
-e
标记是为了让bash知道您希望\n
评估为换行符。