Bash 检查命令响应是否不包含str
我有一个很好的剧本。。。但是如果没有人在线,我不希望它做任何事情。我查阅了所有关于如何检查str是否不在一个变量内的文档,但它总是显示相同的错误,我认为可能是其他错误,但实际上除了在底部添加fi用于新if语句以检查是否没有用户在线之外,没有其他错误 错误: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
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上运行的。标题清晰可见。