是否可以像这样将 if 语句放在 If 语句中?

是否可以像这样将 if 语句放在 If 语句中?

我正在尝试将 if 语句放入 if 语句中。它似乎一直有效,直到脚本中的最后一个 echo 命令不打印为止。

为了进行测试,我创建了一个与通过提示输入的 $foldername 同名的目录。我在脚本执行期间输入此内容。在脚本运行期间,我选择覆盖目录的选项,效果很好。但是,我很困惑为什么在替换文件夹后,脚本没有移至最后一个 echo 语句:

echo "Folder $foldername has now been created"

这没有打印在屏幕上,这表明脚本没有退出 if 语句部分。有什么想法吗?

#!/bin/bash
echo "Please input the folder name you would like to create then press ENTER"
read foldername

if [ -d "/home/location/test_directories/$foldername" ]
then
    echo "$foldername already exists"
    sleep 2
    echo
    echo
    echo "Do you want to overwrite this folder and start afresh?"
    read -p "Type Y overwrite the folder, or N to exit the script" -n 1 -r
    echo

    if [[ $REPLY =~ ^[Yy]$ ]]
    then
        echo "You have chosen to overwrite the folder $foldername"

        rm -rf /home/location/test_directories/$foldername; mkdir /home/location/test_directories/$foldername
        sleep 2
    else
        exit
    fi

    exit
else
    mkdir /home/location/test_directories/$foldername
fi

sleep 2
echo "Folder $foldername has now been created"

答案1

是的,您可以if随心所欲地嵌套陈述。

正如问题评论中指出的那样,您的代码的问题是这两个exit语句。采取触发其中任何一个的分支都会终止脚本。

据我所知,这两个exit陈述都是多余的,可能会被删除。

您还应该养成对用户交给您的任何变量进行双引号的习惯,例如$foldername.在这种情况下,能够处理带有空格的文件夹名称。

...或者使用换行符、制表符或其他“字段分隔符”(如果您已修改)IFS,或者使用*, ?[对于 shell 来说是特殊的),如果您extglob在 中启用了该选项,则使用更多bash

相关内容