Koo*_*rus 2 bash shell arguments if-statement command-line-arguments
我有一个bash语句来测试命令行参数.如果传递给脚本的参数是"干净",则脚本将删除所有.o文件.否则,它会构建一个程序.但是,无论传递什么(如果有的话),脚本仍然认为参数"clean"正在传递.
#!/bin/bash
if test "`whoami`" != "root" ; then
echo "You must be logged in as root to build (for loopback mounting)"
echo "Enter 'su' or 'sudo bash' to switch to root"
exit
fi
ARG=$1
if [ $ARG == "clean" ] ; then
echo ">>> cleaning up object files..."
rm -r src/*.o
echo ">>> done. "
echo ">>> Press enter to continue..."
read
else
#Builds program
fi
Run Code Online (Sandbox Code Playgroud)
在bash中,空间很重要.更换:
[ $ARG=="clean" ]
Run Code Online (Sandbox Code Playgroud)
附:
[ "$ARG" = "clean" ]
Run Code Online (Sandbox Code Playgroud)
bash解释$ARG=="clean"为单字符串.如果在测试语句中放置单个字符串,则测试在字符串为空时返回false,如果非空,则返回true. $ARG=="clean"永远不会是空的.因此[ $ARG=="clean" ]将永远返回真实.
第二,$ARG应该引用.否则,如果它为空,则语句缩减为"[=="clean"],这是一个错误("一元运算符预期").
第三,最好的做法是使用较低或混合大小写的局部变量.系统使用大写shell变量,您不希望意外覆盖其中一个变量.
最后,[...]在字符串意义上,POSIX运算符是相等的=.巴什将接受=或==不过=是更加便于携带.