2012-10-20 69 views
2

最近我已經遷移到新的專用服務器上運行操作系統相同-FreeBSD 8.2。我有一個root帳戶訪問權限,並且所有權限都已正確設置。Bash腳本不能在新的專用服務器上工作

我的問題是,在bash腳本我是在舊服務器上運行,那麼在新機器上不工作,運行腳本時出現的唯一的錯誤是:

# sh script.sh 
script.sh: 3: Syntax error: word unexpected (expecting ")") 

下面是代碼本身:

#!/usr/local/bin/bash 

PORTS=(7777:GAME 11000:AUTH 12000:DB) 
MESSG="" 
for i in ${PORTS[@]} ; do 
    PORT=${i%%:*} 
    DESC=${i##*:} 
    CHECK=`sockstat -4 -l | grep :$PORT | awk '{print $3}' | head -1` 
    if [ "$CHECK" -gt 1 ]; then 
     echo $DESC[$PORT] "is up ..." $CHECK 
    else 
     MESSG=$MESSG"$DESC[$PORT] wylaczony...\n" 
     if [ "$DESC" == "AUTH" ]; then 
      MESSG=$MESSG"AUTH is down...\n" 
     fi 
     if [ "$DESC" == "GAME" ]; then 
      MESSG=$MESSG"GAME is down...\n" 
     fi 
     if [ "$DESC" == "DB" ]; then 
      MESSG=$MESSG"DB is down...\n" 
     fi 

    fi 
done 

if [ -n "$MESSG" ]; then 
    echo -e "Some problems ocurred:\n\n"$MESSG | mail -s "Problems" [email protected] 
fi 

我真的不代碼在bash,所以我不知道爲什麼這個happend ...

回答

1

還你不應該需要通過sh來運行它(這是第一行是什麼 用於 - 操作系統將運行行的其餘部分作爲命令並傳遞文件的內容供它解釋)。只需使腳本可執行即可: chmod +x script.sh 然後您可以直接在名稱前沒有sh的地方直接運行它。

這有可能是默認的shell不是通過sh運行一下bash和所以你用不同的外殼,然後給出錯誤

+0

我也這樣做了 - 輸出:'#script.sh script.sh:找不到命令.'也嘗試使用此命令運行腳本:'。/ script.sh',但輸出與上面相同。 – Scott

+0

Scott,您需要將它作爲./script.sh運行的原因是當前目錄不在PATH中。 PATH環境變量告訴shell要搜索命令的目錄。你可以(雖然這是一個壞主意,出於安全原因)添加「。」到PATH,然後shell會搜索你所在的目錄。 – Nick

0

的代碼看起來很好解釋它。很可能您的新專用服務器運行的是舊版本的Bash,而不是您最後的服務器。或者/ usr/local/bin/bash指向舊版本。

運行

$如果輸出是bash的

以外/usr/local/bin/bash然後更改第一家當線到新的路徑,如果它仍然無法正常工作

嘗試更換第三行:

PORTS=(7777:GAME 11000:AUTH 12000:DB) 

機智h

PORTS=('7777:GAME' '11000:AUTH' '12000:DB') 

並重新運行該腳本。

如果仍然不工作,然後在這裏運行

$ bash --version 
+0

'哪個bash'的輸出是'/ usr/local/bin/bash',當我通過'/ usr/local/bin/bash script.sh'運行腳本時,它正在運行... – Scott

0

發佈BASH版本嘗試面對和尾隨空格

PORTS=(7777:GAME 11000:AUTH 12000:DB) 
2

的Bourne shell(sh)不支持的陣列,這是爲什麼在使用時遇到此錯誤

sh script.sh 

使用bash代替

bash script.sh 

注意:我懷疑sh script.sh舊服務器上工作,因爲sh鏈接到bash那裏。

相關問題