2013-01-19 115 views
0

我已经得到了OSX下面的shell脚本我想用它来纠正一个用户目录/修复权限,但我得到的错误:傻shell脚本错误

bash-3.2# sh fix-perms.sh 
fix-perms.sh: line 23: syntax error near unexpected token `else' 
fix-perms.sh: line 23: `else' 

我的脚本:

#!/bin/sh 

# Script fixes permissions in Users directory 

# Set PATH as shortcut 
# 
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH 

# First verify volume is mounted before executing 

if [ -d /Volumes/UserStorage ] ; 
then 

     USERS=`mktemp -t users-XXXXX.log` 
     ls -1 /Volumes/UserStorage/Users > $USERS 

     for i in `cat $USERS`; do 
     chmod -R 700 /Volumes/UserStorage/Users/$i 

     find /Volumes/UserStorage/Users/$i -type d -exec chmod 701 {} \; 
     exit 0 

else 

echo Volume Not Mounted 

exit 1 

fi 

这是愚蠢的/愚蠢的,我失踪了,但如果我能看到它,我就会变得更糟!

感谢您的提示/洞察力提前。

Dan

回答

1

你在你的for循环忘记done。语法是:

for statement 
do 
    statements... 
done 
+0

啊是的,这是问题所在。但是如果完成循环而不打破它,我怎样才能保持退出状态? – Dan

+1

@Doug:我不确定你的意思。 'exit 0'将终止整个脚本。我猜你想把'exit 0'_____ after _ done' ... – 2013-01-19 04:49:59

+0

弗拉德,是的,回声需要遵循'完成'。现在都好。谢谢你的帮助! – Dan

2

问:你是否意识到你在循环中缺少“完成”?

问:如果将“then”放在与分号相同的行上,会发生什么?

下面是一些例子:

http://www.thegeekstuff.com/2010/06/bash-if-statement-examples/

这是您的原代码,略作修改:

#!/bin/sh 
# Script fixes permissions in Users directory 
# Set PATH as shortcut 
# 
PATH=/bin:/usr/bin:/sbin:/usr/sbin export PATH 

# First verify volume is mounted before executing 
if [ -d /Volumes/UserStorage ] ; then 
     USERS=`mktemp -t users-XXXXX.log` 
     ls -1 /Volumes/UserStorage/Users > $USERS 

     for i in `cat $USERS`; do 
      chmod -R 700 /Volumes/UserStorage/Users/$i 

      find /Volumes/UserStorage/Users/$i -type d -exec chmod 701 {} \; 
      exit 0 
     done 

else 
    echo Volume Not Mounted 
    exit 1 
fi 
+0

nope,然后移动到同一行没有区别 – Dan