web-dev-qa-db-ja.com

シェルスクリプト-存在しない場合はディレクトリを作成する

ディレクトリの名前を入力して、それが存在するかどうかを確認したい。存在しない場合は作成したいのですが、エラー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
7
Pizzaman
_if [ -L $dirname]
_

この行によって生成されたエラーメッセージを見てください。「[:missing `] '」など(使用しているシェルによって異なります)。ブラケットの内側にスペースが必要です。二重括弧を使用しない限り、変数展開を二重引用符で囲む必要もあります。 ルールを学ぶ 、または単純なルールを使用できます:変数の置換とコマンドの置換を常に二重引用符で囲みます— _"$foo"_、"$(foo)"

_if [ -L "$dirname" ]
_

次に、論理エラーが発生します。ディレクトリを指し示さないシンボリックリンクがある場合にのみ、ディレクトリを作成します。あなたはおそらくそこに否定をするつもりでした。

スクリプトの実行中にディレクトリが作成される可能性があることを忘れないでください。そのため、ディレクトリが存在しないことを確認すると、ディレクトリを作成しようとしたときにディレクトリが存在する可能性があります。 「チェックしてから実行」を実行せず、常に「実行して失敗を検出」してください

ディレクトリが存在しない場合にディレクトリを作成する正しい方法は、

_mkdir -p -- "$dirname"
_

(_$dirname_に空白またはグロビング文字が含まれる場合の二重引用符、_--_で始まる場合の_-_。)

このコードを試してください:

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
4
Chitta ranjan

これを試して: ls yourdir 2>/dev/null||mkdir yourdir、これは小さくて簡潔で、タスクを実行します。

2
squid
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
1
Vasanta Koli