linux中使用if else判断文件夹是否存在

linux中使用if else判断文件夹是否存在

我有以下 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 也指出的那样)或者应该单独占一行]thenthen
  • handouts"和之间必须有一个空格]
  • 你应该(但这不会产生错误)一致缩进,或者使用选项-mmkdir如@skwlisp所示)

就像是:

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会有任何抱怨。

相关内容