我想输入目录的名称并检查它是否存在。
如果它不存在我想创建,但我收到错误mkdir: cannot create directory'./' File exists
我的代码说该文件存在,即使它没有。我做错了什么?
echo "Enter directory name"
read dirname
if [[ ! -d "$dirname" ]]
then
if [ -L $dirname]
then
echo "File doesn't exist. Creating now"
mkdir ./$dirname
echo "File created"
else
echo "File exists"
fi
fi
答案 0 :(得分:13)
if [ -L $dirname]
查看此行生成的错误消息:“[:missing`]'”或某些此类(取决于您正在使用的shell)。你需要在括号内有一个空格。除非使用双括号,否则还需要围绕变量扩展使用双引号;您可以使用learn the rules,也可以使用简单的规则:始终使用围绕变量替换和命令替换的双引号 - "$foo"
,"$(foo)"
。
if [ -L "$dirname" ]
然后出现了一个逻辑错误:只有在存在未指向目录的符号链接时才会创建目录。你可能想要在那里做出否定。
不要忘记在脚本运行时可能会创建目录,因此您的检查可能会显示目录不存在,但在您尝试创建目录时该目录将存在。 Never do “check then do”, always do “do and catch failure”
如果目录不存在,创建目录的正确方法是
mkdir -p -- "$dirname"
(案例$dirname
中的双引号包含空格或全局字符,--
以-
开头。)
答案 1 :(得分:2)
试试这段代码:
echo "Enter directory name"
read dirname
if [ ! -d "$dirname" ]
then
echo "File doesn't exist. Creating now"
mkdir ./$dirname
echo "File created"
else
echo "File exists"
fi
输出日志:
Chitta:~/cpp/shell$ ls
dir.sh
Chitta:~/cpp/shell$ sh dir.sh
Enter directory name
New1
File doesn't exist. Creating now
File created
chitta:~/cpp/shell$ ls
New1 dir.sh
Chitta:~/cpp/shell$ sh dir.sh
Enter directory name
New1
File exists
Chitta:~/cpp/shell$ sh dir.sh
Enter directory name
New2
File doesn't exist. Creating now
File created
Chitta:~/cpp/shell$ ls
New1 New2 dir.sh
答案 2 :(得分:2)
试试这个:read(byte[])
,它既简洁又简洁,可以完成你的任务。
答案 3 :(得分:0)
read -p "Enter Directory Name: " dirname
if [[ ! -d "$dirname" ]]
then
if [[ ! -L $dirname ]]
then
echo "Directory doesn't exist. Creating now"
mkdir $dirname
echo "Directory created"
else
echo "Directory exists"
fi
fi