检查命令响应是否不包含str

时间:2013-06-10 09:35:53

标签: bash string-comparison

我有一个很好用的脚本......但是如果网上没有人,我希望它不会做任何事情。我查看了有关如何检查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

1 个答案:

答案 0 :(得分:12)

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

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

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

所以你不妨使用glob模式。

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