2016-06-29 89 views
-2

正如标题所述。如果在Bash中声明简单。我一直在试图弄清为什么这个循环不起作用,现在我还没有拿出任何东西两天。洞察力将不胜感激。Bash if/else循环错误

declare -r TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S,%3N") 

CHECK="$(grep -c "$TIMESTAMP" /var/log/host/logname.log)" 
if [ "$CHECK" -eq 0 ] 
then 
    COLOR="green" 
elif [ 0 -lt "$CHECK" ] && [ "$CHECK" -le 5 ] 
    COLOR="yellow" 
else 
    COLOR="red" 
fi 

COLOR var是由我正在使用的系统预设的东西。红色/黄色/绿色都是正确的,但是我的语法或逻辑都是问题,尽管我一直在努力确定。谢谢!

编辑:我的错。清晨和问题充满了错字。我修好了他们。错误如下,

syntax error near unexpected token `else' 
`  else' 
+3

我看不到你的for循环。代码上的语法高亮显示应该已经是可疑的了:在第一行找到字符串的结尾引号。另外“它不工作”是不够的信息。 –

+2

请贴上你得到的错误! – Fazlin

+0

我在脚本的第一行('date'命令)看不到结尾''' – Fazlin

回答

0

你有一些错误,这可能有助于

declare -r TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S,%3N") 
CHECK="$(grep -c "$TIMESTAMP" /var/log/host/logname.log)" 
if [ "$CHECK" -eq 0 ] 
then 
    COLOR="green" 
elif [ 0 -lt "$CHECK" ] && [ "$CHECK" -le 5 ] 
then 
    COLOR="yellow" 
else 
    COLOR="green" 
fi 
+1

你忘了'fi' :) – Fazlin

+0

是的,谢谢。 :) – sozkul

+0

关闭,但仍然无法正常工作。 – SaintHax

1

你忘了报价,和然后。

declare -r TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S,%3N") # missing " here 

CHECK="$(grep -c "$TIMESTAMP" /var/log/host/logname.log)" 
if [ "$CHECK" -eq 0 ]; then 
    COLOR="green" 
elif [ 0 -lt "$CHECK" ] && [ "$CHECK" -le 5 ]; then # missing then was here 
    COLOR="yellow" 
else 
    COLOR="red" 
fi 
+0

啊!我没有意识到在使用else/if后我需要第二个“then”。解决了我的问题。非常感谢! – Setarcos

+0

顺便说一下,我会亲自为您的只读变量保留大写字母,小写字母表示其他变量。稍后解决问题/维护脚本时,这是一个方便的惯例。 – SaintHax

+0

现在选择一个答案作为正确的答案 - 我不在乎哪个,它只是SO代表:-) – SaintHax