如果是bash中的树,那么"大"

Bar*_*lom 1 bash shell if-statement sh

if [ "$1" == "on" ]; then

        echo "Maintenance going on"
        echo "<maintenance/>" > $MFILE

else if [ "$1" == "off" ]; then

        echo "Maintenance going off"
        rm $MFILE

else if [ "$1" == "status" ]; then

        if [ -f $MFILE ]; then
                echo "Maintenance is ON"
        else
                echo "Maintenance is OFF"
        fi

else

        echo "ERROR: Unknown command $1"
        exit 1

fi
Run Code Online (Sandbox Code Playgroud)

如果我尝试运行此脚本,则会出现"意外的文件结束"错误.我怀疑是因为if/else/else if中出现了问题,但我发现谷歌难以理解语法的例子.这里有人知道吗?

Ken*_*ent 6

你应该使用"elif",而不是"else if"

来自http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html的文字

这是if语句的完整形式:

如果TEST-COMMANDS; 然后

CONSEQUENT-命令;

elif MORE-TEST-COMMANDS; 然后

MORE-CONSEQUENT-命令;

否则交替 - 后果 - 命令;

科幻

执行TEST-COMMANDS列表,如果其返回状态为零,则执行CONSEQUENT-COMMANDS列表.如果TEST-COMMANDS返回非零状态,则依次执行每个elif列表,如果其退出状态为零,则执行相应的MORE-CONSEQUENT-COMMANDS并且命令完成.如果else后跟一个ALTERNATE-CONSEQUENT-COMMANDS列表,并且最终if或elif子句中的最后一个命令具有非零退出状态,则执行ALTERNATE-CONSEQUENT-COMMANDS.返回状态是执行的最后一个命令的退出状态,如果没有条件测试为真,则返回零.


ben*_*y23 6

稍微偏离主题,但以下内容不会更具可读性:

case $1 in
on)
        echo "Maintenance going on"
        echo "<maintenance/>" > $MFILE
        ;;

off)

        echo "Maintenance going off"
        rm $MFILE
        ;;

status)

        if [ -f $MFILE ]; then
                echo "Maintenance is ON"
        else
                echo "Maintenance is OFF"
        fi
        ;;

*)    
        echo "ERROR: Unknown command $1"
        exit 1
        ;;

esac
Run Code Online (Sandbox Code Playgroud)