bash脚本不适用于新的专用服务器



最近,我迁移到了在上运行的新专用服务器,相同的操作系统-FreeBSD 8.2。我获得了一个root帐户访问权,并且所有权限都已正确设置。

我的问题是,我在旧服务器上运行的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:nn"$MESSG | mail -s "Problems" yet@another.com
fi

我不是真正的bash代码,所以我不知道为什么会发生...

bourne shell( sh)不支持数组,这就是为什么当您使用

时遇到此错误
sh script.sh

使用 bash代替

bash script.sh

NOTE :我怀疑sh script.sh在旧服务器上工作,因为sh链接到那里的bash

也不需要通过 sh运行它(这就是什么 #! 在第一行中是 - OS将以命令作为命令运行该行的其余部分,并传递文件的内容以解释)。只需使脚本可执行: chmod +x script.sh然后,您只需在名称前面的sh即可直接运行它。

默认外壳可能不是bash,因此通过sh运行它,您可以用不同的外壳来解释它,然后给出错误

代码看起来不错。您的新专用服务器可能比上一台服务器运行较旧版本的bash版本。也许/usr/local/bin/bash指向较旧版本。

运行

$ bash

如果输出除了/usr/local/bin/bash之外,则将第一个Shebang线更改为较新路径,如果它仍然不起作用

尝试更换第三行:

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

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

并重新运行脚本。

如果它仍然不起作用,请在此处通过运行

发布bash版本
$ bash --version

尝试面对和尾巴

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

相关内容

  • 没有找到相关文章

最新更新