我已编辑了我的脚本,并且没有更多错误,但是,脚本没有执行到Minecraft服务器,根本没有公告尝试。我感到困惑。好像它根本没有运行,就像服务器没有运行一样,但是它应该是匹配的"正在运行"来自status命令。
,代码是:
#!/bin/bash
checkServer=$(/etc/init.d/minecraft status);
cd /.smc;
# Is the server even running?
if [ checkServer = *"is running"* ];
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';
# Should we restart announcement que?
if lastAnn == ${#announcement[@]}+1;
then
echo 0 < /.smc/lastAnnouncement.txt;
fi
# Send announcement
sendAnnouncement=$(/etc/init.d/minecraft command say announcement[lastAnn]);
# Next announcement count
lastAnn=$((lastAnn+1));
# Write next announacment count
echo lastAnn < /.smc/lastAnnouncement.txt;
fi
答案 0 :(得分:0)
尝试:
if [ checkServer = *"is running"* ];
(是单等号)
答案 1 :(得分:0)
我相信你的脚本有很多语法错误。
即。这一行有一个问题:
sendAnnouncement = $(/etc/init.d/minecraft command say $announcement[$lastAnn]);
替换为:
sendAnnouncement=$(/etc/init.d/minecraft command say $announcement[$lastAnn])
bash(和其他shell)在赋值运算符=
之前和之后不允许空格
这一行:
lastAnn=$lastAnn+1;
应替换为:
lastAnn=$((lastAnn+1))
答案 2 :(得分:0)
有很多错误:
首先,
if [[ $checkserver == *"is running"* ]]
使用double [[...]]和变量引用是$ checkserver。 然后,
sendAnnouncement=$(
没有空间。
此外,
if [ $lastAnn == $((${#announcement[@]}+1)) ]
可能更多......
答案 3 :(得分:0)
您的脚本存在多个问题,从无用的分号到错误的逻辑。问题列表很长,以至于发布更正的脚本比指出问题更容易(其他答案甚至没有列出所有错误)。
更正的脚本是:
#!/bin/bash
checkServer=$(/etc/init.d/minecraft status)
cd /.smc
# Is the server even running?
if [[ $checkServer =~ "is running" ]]; 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'
# Send announcement
sendAnnouncement=$(/etc/init.d/minecraft command say ${announcement[$lastAnn]})
# Next announcement count
((++lastAnn))
# Write next announacment count
# Should we restart announcement que?
if [[ $lastAnn -gt ${#announcement[@]} ]]; then
echo 0 > /.smc/lastAnnouncement.txt
else
echo $lastAnn > /.smc/lastAnnouncement.txt
fi
fi
你的脚本存在的问题(除了没有伤害的多余分号,只是不必要的磁盘空间浪费):
$
字符串比较不正确。使用=~
代替==
,[[
代替[
,并从字符串*
*"is running"*
if [ checkServer == *"is running"* ]
错误的重定向。您要写入文件,因此>
,而不是<
。这是多次。
echo 0 < /.smc/lastAnnouncement.txt;
echo 0 < /.smc/lastAnnouncement.txt;
变量名称缺少$
和错误的重定向
echo lastAnn < /.smc/lastAnnouncement.txt;
((++lastAnn))
更容易增加。这也是无效的shell,因为算术需要expr
命令或((...))
builtin
lastAnn=$lastAnn+1;
在变量名中缺少$
。缺少test
,[
或[[
。缺少expr
或$((..))
以添加1
。对于数字相等,应使用-eq
代替==
。从逻辑上讲,这应该使用-gt
来测试最后一个索引,并且不需要+1
。
if lastAnn == ${#announcement[@]}+1;
我不会认为编写消息队列索引的逻辑不正确,并且永远不会循环回0
。
但是,您尝试编写脚本时做得非常好。很多人甚至都没有尝试过。
编辑:我错过了上面脚本第21行数组变量用法的{}
。固定的。