对bash脚本命令行参数非常困惑

1qczuiv0  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(337)

我有下面的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'

如果有人能帮我解决这两个错误,我将不胜感激。因为我已经没有主意了。
提前谢谢!

lztngnrs

lztngnrs1#

如果使用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 换行。

e0uiprwp

e0uiprwp2#

已经尝试了许多if语句的变体,如: if [ $(($1 == 1 )) ] 你应该说:

if (($1 == 1)); then
  ...
fi

关于 Syntax error near unexpected token 否则,这不是因为上面显示的任何代码。它似乎起源于你剧本的其他部分。

相关问题