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