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

Bash 检查命令响应是否不包含str,bash,string-comparison,Bash,String Comparison,我有一个很好的剧本。。。但是如果没有人在线,我不希望它做任何事情。我查阅了所有关于如何检查str是否不在一个变量内的文档,但它总是显示相同的错误,我认为可能是其他错误,但实际上除了在底部添加fi用于新if语句以检查是否没有用户在线之外,没有其他错误 错误:startanouncement.sh:44:[[:未找到 #!/bin/bash checkServer=$(/etc/init.d/minecraft status) checkUsers=$(/etc/init.d/minecraft

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

错误:
startanouncement.sh:44:[[:未找到

#!/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

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

if [[ $checkServer =~ "is running" ]]; then
    if [[ ! $checkUsers =~ "are 0 out" ]]; then
另外,您需要在第二个条件中使用
!~
运算符:参数太多

因此,您不妨使用glob模式

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

如何运行脚本?由于脚本中有
#!/bin/bash
,请不要像
sh myscript
一样运行脚本,因为同样的错误
startAnnouncement.sh:44:[[没有找到,第一个I/OR工作得很好。第44行是最后一个<代码> FI>代码>之前的空白行。您的错误信息与您所发布的代码不符,那么我们如何帮助您呢?我自己解决了这个问题,但是对于您的信息,错误代码与您所做的编辑非常吻合。nk的原因是您正在使用非bash解释器运行脚本:
shmyscript
--
[[
是一个POSIX shell不理解的bash(和ksh,zsh)构造。此外,我还对“您让我做的编辑”感到恼火:我没有强迫你做任何事。你问了一个bash问题,我给了你一个bash答案。接受它或离开它,但对你的行为负责。不需要承担任何责任。你说错误不是来自你的代码。是的。就这么简单。我“接受了”我没有留下它,因为我很感激。我只是让你知道,你似乎认为错误与手头的代码无关,它确实如此。这是通过BASH在CentOS上运行的。标题清晰可见。