Shell脚本 - 如果目录不存在则创建目录

时间:2014-04-07 11:29:50

标签: shell directory mkdir

我想输入目录的名称并检查它是否存在。 如果它不存在我想创建,但我收到错误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

4 个答案:

答案 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