while 循环无法正常工作

while 循环无法正常工作

我有 Python 背景,现在正在学习 Bash 脚本。我在使用 while 循环时遇到了一些问题。在尝试创建一个创建新目录的简单脚本时,输出行为不稳定。

我第一次尝试使用下面的脚本:

#!/bin/bash

while :
do
        echo 'Enter directory name:'
        read newdir
        `mkdir $newdir`

        echo "[+] Directory created!"
        break

        if [ -d $newdir ];then
        echo "[-] cannot create directory. $newdir already exists."
        fi
done

输出是正确的:

xuser@xuser-VB:~/Scripts$ ./newdir.sh
Enter directory name:
abc
[+] Directory created!

但是,如果我尝试创建一个同名的目录,它仍然会[+] Directory created!在系统错误消息之上输出。

xuser@xuser-VB:~/Scripts$ ./newdir.sh
Enter directory name:
abc
mkdir: cannot create directory ‘abc’: File exists
[+] Directory created!

我遗漏了什么或者忘记了什么?

答案1

您需要检查目录是否存在創造它。

#!/bin/bash

while :
do
        echo 'Enter directory name:'
        read newdir

        if [ -d "$newdir" ] ; then
            echo "[-] cannot create directory. $newdir already exists."
            continue
        fi

        mkdir -- "$newdir"
        echo "[+] Directory created!"
        break
done

我还删除了反引号,mkdir没有输出任何内容,因此它们在这种情况下没有用。

此外,双引号变量 - 如果没有双引号,包含空格的目录名将不起作用。

使用mkdir -- "$newdir"将把 $newdir 解释为目录名,即使它以破折号开头。

相关内容