2011-02-05 11 views

答えて

18

あなたが[]カッコ内のスペースを必要とする:

#!/bin/bash 
if [ ! -d /home/mlzboy/b2c2/shared/db ] 
then 
    mkdir -p /home/mlzboy/b2c2/shared/db 
fi 
4

私はあなたのコードをフォーマットし直す必要がありますビットだと思います。bashで

#!/bin/bash 
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then 
    mkdir -p /home/mlzboy/b2c2/shared/db; 
fi; 
193

まず、 "[" だけですコマンドは最後の引数として文字列 "]"を期待しているので、閉じ括弧の前の空白( "!"と "-d"の間にも2つの別個の引数が必要です)が重要です。

if [ ! -d /home/mlzboy/b2c2/shared/db ]; then 
    mkdir -p /home/mlzboy/b2c2/shared/db; 
fi 

第2に、-pスイッチをmkdirに設定しているので、最初はこのチェックが役に立たないため、このチェックは役に立ちません。ただ書いてください:

mkdir -p /home/mlzboy/b2c2/shared/db; 

とthatsそれだけです。

72

実際に存在するかどうかを確認する必要はありません。それが存在する場合、あなたはすでにそれを作成したいので、ちょうどMKDIRは、単純に行う

mkdir -p /home/mlzboy/b2c2/shared/db 
42

を行います:フォルダが既に存在する場合

mkdir /path/to/your/potentially/existing/folder 

ます。mkdirはエラーをスローします。エラーを無視するには、次のように記述してください。

mkdir -p /path/to/your/potentially/existing/folder 

何も確認する必要はありません。

13

クリーナーの方法では、シェル論理演算子のショートカット評価を利用します。演算子の右辺は、左辺が真の場合にのみ実行されます。

[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db 
+9

mmh、クリーナーではない:ちょうど短く。 このような記述が意味を理解するのは難しいです。 –

+0

私はこれが好きですが、 '-p'引数はチェックを不要にします。 '-p'を使用したくない場合、つまり*すべての親ディレクトリを自動的に作成したくない場合にも、このオプションを使用できます。 – ADTC

+1

実際には '[-d/path/to/dir] ||を書く方が短くなります。 mkdir/path/to/dir' ..左側がfalseのときに右側が実行されます。 – ADTC

関連する問題