我有 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 解释为目录名,即使它以破折号开头。