Bash if语句不能正常工作

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)

Joh*_*024 7

回答问题的第一个版本

在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运算符是相等的=.巴什将接受=或==不过=是更加便于携带.