2013-06-05 170 views
0

所以,我有一个IP阵列和一个日期阵列......两个阵列长度相同 因此,DATE [0]是分配IP [0]的日期。BASH通过多个阵列循环

我试图解析整个月份的日志,当它打到某个日期时更改IP ...我知道这是不正确的,所以请帮助我的代码: (Grep语句做的工作,与其他代码,基本上只需要搜索路径取决于日期检查改变....)

ARRAY_COUNTER=0 

NEW_GREP_TERM=${IPS[0]} 

for i in {01..31} 
do 
SEARCHPATH=${BASEPATH}/${DEF_YEAR}${DEF_MONTH}/SG_22[8-9]${DEF_MONTH}${i}* 
zgrep --no-filename $NEW_GREP_TERM $SEARCHPATH | awk -f /usr/local/bin/cvsit.awk >> $OUTFILE 
if [$i = ${DATES[$ARRAY_COUNTER]}] 
     then 
     NEW_GREP_TERM = ${IPS[$ARRAY_COUNTER]} 
     zgrep --no-filename $NEW_GREP_TERM $SEARCHPATH | awk -f /usr/local/bin/cvsit.awk >> $OUTFILE 
     ARRAY_COUNTER=$ARRAY_COUNTER+1 

fi 
done 
+2

该代码包含语法错误,没有任何问题。 – jordanm

+0

你必须在命令名称周围放置空格,例如'['(''和'['命令期望它的最后一个参数是''',如果不是)抱怨。 –

+1

对于'bash',最好使用[['和']]',它更聪明,但便携性更低。你将会有更少的语法错误,并且这种方式的混淆行为更少。 – jpaugh

回答

1
  1. 作为乔恩athan指出,[]应该有前导和后置空白。您可以运行which [以了解[实际上是一个命令。 if关键字接受布尔语句或变量,并且[ foo ]将测试foo为true或false。
  2. 如果您想要0, 1, 2, 3, ..., 31这样的整数范围,您可以在BASH中使用$(seq 0 31)编辑:领先的0在这里很重要。因此{...}内置记法是更可取的。
  3. 最好使缩进一致。它更易于阅读。
+0

为什么'seq'(一个可执行文件)比内置符号更适合?是否因为{{$ min .. $ max}'不起作用?或者是其他东西? – jpaugh

+0

此外,我通常建议'[['作为一个全面的语法“更正”,以'[' - 至少对于bash。 – jpaugh

+0

seq不会工作,因为我需要前导零 –