我正在尝试将 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
。