
次の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"]
then
then
if [ -d "/$home/DB_handouts" ]; then
また、状況に応じてmkdir -p
これを実行できることを確認してください。例を見ると、次のことがうまくいくはずです。
mkdir -p /foo/bar
chmod 777 /foo/bar
答え2
スクリプトにはいくつかの問題があります。
;
@heemaylも指摘したように、私との間に1つがあるか、独自の行にある必要があります。]
then
then
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
苦情はありません。