Linuxにフォルダがあることを確認するには、else ifを使用してください。

Linuxにフォルダがあることを確認するには、else ifを使用してください。

次のbashスクリプトがあります。

if [ -d "/$home/DB_handouts"] then
 echo "Directory DB_handouts found"
else
mkdir /$home/DB_handouts
 chmod 777 /$home/DB_handouts
fi

上記のコードを実行するとエラーが発生します。

./file.sh: line 12: syntax error near unexpected token `else'
./file.sh: line 12: `   else'

この問題をどのように解決できますか?

答え1

;との間にセミコロン()(または改行)を追加する必要があります。if [ -d "/$home/DB_handouts"]thenthen

if [ -d "/$home/DB_handouts" ]; then

また、状況に応じてmkdir -pこれを実行できることを確認してください。例を見ると、次のことがうまくいくはずです。

mkdir -p /foo/bar
chmod 777 /foo/bar

答え2

スクリプトにはいくつかの問題があります。

  • ;@heemaylも指摘したように、私との間に1つがあるか、独自の行にある必要があります。]thenthen
  • handouts"の間にスペースが必要です。]
  • 一貫してインデントする必要がありますが、エラーは発生しません。または、@skwlispが提案したように-mオプションを使用する必要があります。mkdir

それは次のとおりです。

if [ -d "/$home/DB_handouts" ] 
then
  echo "Directory DB_handouts found"
else
  mkdir -m 777 /$home/DB_handouts
fi

もちろん、上記の仮定/$homeが存在し、以下を使用してすべてを簡単に実装できます。

mkdir -p -m 777 /$home/DB_handouts

ディレクトリがすでに存在する場合、-p苦情はありません。

関連情報