我是编写脚本的新手,我试图从一个简单的开始。我很难过收到错误的原因:[: 13: Illegal number: count
来自下面的代码。第13行是最后一个fi
。
count=grep "^$(date -d -30minute +'%Y-%m-%d %H:%M')" /var/log/****/zlsapp.log | wc -l
if [ count -ge 50 ]
then
if [ count -lt 100 ]
then
exit 1
fi
if [ count -ge 100 ]
then
exit 2
fi
exit 0
fi
无论如何还要复制if if(count >= 50 && count < 100)
等语句?
答案 0 :(得分:4)
有两个原因。 bash变量中的(1)是无类型的(可以是int,可以是char)。为了消除歧义,您可以使用以下命令指定类型:
declare -i count
告诉bash它应该是一个int。 (2)您需要使用$
取消引用您的变量才能获得回数。 I.E.
[ $count -lt 100 ]
(引用变量也是一种好习惯 - 不是必需的,但是很好的做法:[ "$count" -lt 100 ]
。如果仍有问题,请发表评论。
答案 1 :(得分:2)
该行:
count=grep "^$(date -d -30minute +'%Y-%m-%d %H:%M')" /var/log/zumigo/zlsapp.log | wc -l
可能不会按照您的想法执行(或者您没有准确地将实际代码复制并粘贴到问题中)。如果在2014-08-01中间运行,则运行命令&#34; 2014-08-01 12:00&#34;将日志文件作为参数,将环境变量count
设置为值grep
,并将可能不存在的命令的输出传递给wc -l
。
当您随后在测试语句中测试$count
时,它是一个空字符串,无法正确转换为数字。
你可能意味着:
count=$(grep "^$(date -d -30minute +'%Y-%m-%d %H:%M')" /var/log/zumigo/zlsapp.log | wc -l)
这会捕获日志文件上运行grep
的输出并将输出汇总到wc -l
。
如果您使用bash -x
或等效的脚本运行脚本(-x
选项通常会显示脚本的执行情况),您应该看到这一点。
答案 2 :(得分:1)
问题是count
没有引用变量count
;它只是字符串"count"
。
变化:
if [ count -ge 50 ]
到
if [ $count -ge 50 ]
并在其他位置进行相应的更改(但不在初始分配中)。
您还应该使用双引号:
if [ "$count" -ge 50 ]
无论如何还要复制if if(count&gt; = 50&amp;&amp; count&lt; 100)这样的陈述?
是:
<击> 撞击>
<击>if [ "$count" -ge 50 -a "$count" -lt 100 ]
击> <击> 撞击>
可能有效,但-a
(逻辑和)运算符为marked as obsolescent by POSIX。而是写
if [ "$count" -ge 50 ] && [ "$count" -lt 100 ]
如果您正在使用bash,info bash
并搜索&#34;测试&#34;命令([
是test
)的别名。
如果您正在使用bash,则应考虑使用[[ ... ]]
而非[ ... ]
- 或者您可以使用(( ... ))
作为算术表达式。有关详细信息,请参阅bash documentation(关注iink或输入info bash
)。
除了缺少$
标志之外,还有脚本的第一行:
count=grep "^$(date -d -30minute +'%Y-%m-%d %H:%M')" /var/log/****/zlsapp.log | wc -l
没有设置count
变量,因为您没有捕获grep ... | wc -l
命令的输出。为此:
count=$(grep "^$(date -d -30minute +'%Y-%m-%d %H:%M')" /var/log/****/zlsapp.log | wc -l)
(是的,$(...)
可以嵌套。)