2012-10-20 68 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那里。

相关问题