bash中的“大型”else if树

bash中的“大型”else if树,bash,shell,if-statement,sh,Bash,Shell,If Statement,Sh,如果尝试运行此脚本,则会出现意外的文件结束错误。我怀疑这是因为if/else/else-if中有错误,但我发现用谷歌搜索一个语法应该是什么样的例子非常困难。这里有人知道吗?你应该使用elif,如果有,就不要使用elif 文本来自 这是if语句的完整形式: 如果是测试命令;然后 后续命令 elif更多测试命令;然后 更多后续命令 else交替后续命令 fi 执行测试命令列表,如果其返回状态为零, 执行后续命令列表。如果TEST-COMMANDS返回 非零状态,依次执行每个elif列表,如果退出 状

如果尝试运行此脚本,则会出现意外的文件结束错误。我怀疑这是因为if/else/else-if中有错误,但我发现用谷歌搜索一个语法应该是什么样的例子非常困难。这里有人知道吗?

你应该使用elif,如果有,就不要使用elif

文本来自

这是if语句的完整形式:

如果是测试命令;然后

后续命令

elif更多测试命令;然后

更多后续命令

else交替后续命令

fi

执行测试命令列表,如果其返回状态为零, 执行后续命令列表。如果TEST-COMMANDS返回 非零状态,依次执行每个elif列表,如果退出 状态为零,则执行相应的后续命令 命令完成。如果else后面跟一个 备用后续命令列表,以及最终命令列表中的最终命令 如果或elif子句具有非零退出状态,则 执行备用后续命令。返回状态为 执行的最后一个命令的退出状态,如果没有条件,则为零 事实证明是真的


您应该使用elif,如果

文本来自

这是if语句的完整形式:

如果是测试命令;然后

后续命令

elif更多测试命令;然后

更多后续命令

else交替后续命令

fi

执行测试命令列表,如果其返回状态为零, 执行后续命令列表。如果TEST-COMMANDS返回 非零状态,依次执行每个elif列表,如果退出 状态为零,则执行相应的后续命令 命令完成。如果else后面跟一个 备用后续命令列表,以及最终命令列表中的最终命令 如果或elif子句具有非零退出状态,则 执行备用后续命令。返回状态为 执行的最后一个命令的退出状态,如果没有条件,则为零 事实证明是真的


有点离题,但以下内容是否更具可读性:

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

有点离题,但以下内容是否更具可读性:

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

真正的信息来源,而不是依赖随机的网络教程

GNU bash信息手册:

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
手册页:

$ info bash
单一Unix规范[Shell语法]:


真正的信息来源,而不是依赖随机的网络教程

GNU bash信息手册:

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
手册页:

$ info bash
单一Unix规范[Shell语法]:

选择elif已经是一个很好的选择,我希望这能提供一些信息。出现文件意外结尾错误的原因是ifs未正确关闭。我不确定这是否是Kaz在回答中想要说的,所以我添加了这个回复,就像bash看到你的脚本一样 如果 其他的 .. 如果 .. 其他的 .. .. 如果 ,因此有2个fi缺失

希望这有帮助

选择elif已经是一个很好的选择,我希望这能提供一些信息。出现文件意外结尾错误的原因是ifs未正确关闭。我不确定这是否是Kaz在回答中想要说的,所以我添加了这个回复,就像bash看到你的脚本一样 如果 其他的 .. 如果 .. 其他的 .. .. 如果 ,因此有2个fi缺失


希望这有帮助

如果错误属于stderr而不是stdout,那么您不应该使用elif而不是else吗。回音错误…>&2如果错误属于stderr而不是stdout,那么您不应该使用elif而不是else吗。回音错误…>&2这就是我所说的很难找到一个例子的意思。如果这就是我所说的难以找到一个例子的意思。else说,在这些日子里,谷歌的首次点击通常不是随机的。事实上,StackOverflow问题经常是其中之一,这是网站的驱动力之一。但是谢谢你的信息。这些天来,谷歌的第一次点击是由关键词填充搜索引擎优化器驱动的。事实上,这绝非偶然如今,谷歌的首次点击通常不是随机的。事实上,StackOverflow问题经常是其中之一,这是网站的驱动力之一。但是谢谢你的信息。这些天来,谷歌的第一次点击是由关键词填充搜索引擎优化器驱动的。事实上,这绝非偶然