2013-01-19 116 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