ディレクトリの名前を入力して、それが存在するかどうかを確認したい。存在しない場合は作成したいのですが、エラー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
_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
これを試して: ls yourdir 2>/dev/null||mkdir yourdir
、これは小さくて簡潔で、タスクを実行します。
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