4

我有一个很好用的脚本……但如果没有人在线,我不希望它做任何事情。我查看了有关如何检查 str 是否不在变量中的所有文档,但它总是抛出相同的错误,我认为这可能是其他错误,但实际上除了在底部添加 fi 之外没有其他任何内容对于新的 if 语句来检查是否没有用户在线...

错误:startAnnouncement.sh: 44: [[: not found

#!/bin/bash

checkServer=$(/etc/init.d/minecraft status)
checkUsers=$(/etc/init.d/minecraft command list)
cd /.smc

# Is the server even running?
if [[ $checkServer =~ "is running" ]]; then

    #Is anyone online to even see the message...?
    if [[ ! $checkUsers =~ "are 0 out" ]]; then

       # No count file? Create it.
        if [ ! -f /.smc/lastAnnouncement.txt ]; then
            echo 0 > /.smc/lastAnnouncement.txt
        fi

        # Load count
        lastAnn=$(cat /.smc/lastAnnouncement.txt)

        # ANNOUNCEMENTS
        announcement[0]='Dont  forget to check out http://fb.com/pyrexiacraftfans for news and updates'
        announcement[1]='Use our Facebook page to request land protection! Visit http://fb.com/pyrexiacraftfans'
        announcement[2]='Stay tuned for the announcement of our spawn build competition soon on our Facebook page!'
        announcement[3]='We have upgraded the server with mcMMO and Essentials Economy! Stay tuned for shop openings!'

        announcementText=${announcement[$lastAnn]}

        # Send announcement
        sendAnnouncement=$(/etc/init.d/minecraft command say $announcementText)

        # Next announcement count
        ((++lastAnn))

        # Write next announacment count
        # Should we restart announcement que?
        if [ $lastAnn -gt $((${#announcement[@]}-1)) ]; then
                echo 0 > /.smc/lastAnnouncement.txt
        else
                echo $lastAnn > /.smc/lastAnnouncement.txt
        fi

    fi

fi
4

1 回答 1

12

您的条件实际上并不使用正则表达式特殊字符,

if [[ $checkServer =~ "is running" ]]; then
    if [[ ! $checkUsers =~ "are 0 out" ]]; then

此外,您需要!~在第二个条件下使用运算符:您有太多参数

因此,您不妨使用 glob 模式。

if [[ $checkServer == *"is running"* ]]; then
    if [[ $checkUsers != *"are 0 out"* ]]; then
于 2013-06-10T11:31:24.633 回答