尔加,该脚本是充满了不好的脚本行为(除了你正在运行到完全错误)。下面是彻底错误:
$ERRORSTRING = "Error. Please make sure you've indicated correct parameters"
由于devnull指出,这应该是:
ERRORSTRING="Error. Please make sure you've indicated correct parameters"
几行下(并再次接近尾声),我们有:
echo $ERRORSTRING;
...这工作,但包含了两个不好的想法:没有用双引号(这有时会以意想不到的方式进行解析)可变参考,并分号在行尾(这是某人试图在shell脚本中编写C或Java或其他东西的标志)。使用这个来代替:
echo "$ERRORSTRING"
的下一行是:
elif [ $1 == "live" ]
...这威力工作,取决于$1
值是否有空格,或者被定义,但是空白,或类似的东西(再次,使用双引号来防止误解!)。此外,==比较操作是非标准的 - 它会工作,因为bash的支持在其[ ... ]
内置语法,但如果你在具有bash的扩展可用计数,为什么不使用更清洁的替代[[ ... ]]
?任何这些将是更好的替代该行:
elif [ "$1" = "live" ]
elif [[ $1 == "live" ]]
elif [[ "$1" == "live" ]]
就个人而言,我更喜欢最后一个。在这种情况下不需要使用双引号,但IMO最安全的做法是对所有变量引用进行双引号引用,除非有特定的原因。再往下看,有相同的评论适用于elif [ $2 == "go" ]
。
BTW,有一个为shell脚本在www.shellcheck.net良好的健全检查工具。它不像我一样挑剔(例如,它不会在行末尾标记分号),但它指出了此脚本中的所有实际错误...
'='符号周围有空格。读取相应的行为'$ ERRORSTRING =“错误。请确保您已经指出了正确的参数”'',在'='符号周围没有空格。 –
(1)删除'='周围的空格。 (2)分配一个变量时,不要使用'$'(在LHS上)。 – devnull
'ERRORSTRING =“错误,请确保你已经指出了正确的参数”' – devnull