while循环的问题

时间:2011-09-23 19:32:07

标签: bash shell while-loop

这是我写的脚本,但它似乎有问题!假设将K的内容与SDATE进行比较,而它们不相等则转到循环!

for d in \
 $(sed -nre 's/.*\[(..)\/(...)\/(....):(..:..:..) .*/\1 \2 \3 \4/p' thttpd.log | date +%s -f-);
do echo $d >s1; done

time=$(expr 60 \* 60 \* 24 \* 5)
EDATE=`tail -1 s1`
SDATE=$[$EDATE - $time]
time=$(expr 60 \* 60 \* 24 \* 5)
EDATE=`tail -1 s1`
SDATE=$[$EDATE - $time]
k=`tail -1 s1`
echo $k
echo $SDATE
while [$k -ne $SDATE](k and SDATE contain numbers)
 do
k=`tail -1 s1`
sed '1d' < s1 > tempfile
mv s1 s1.old
mv tempfile s1
echo $K| awk '{print strftime("%d/%m/%Y:%T",$1)}'|tee -a ass

done

3 个答案:

答案 0 :(得分:1)

试试这个:

while [[ $k != $SDATE ]]

答案 1 :(得分:1)

问题是[]周围没有空格。这导致BASH错误地解析了这条线。

使用以下行,BASH将尝试运行程序[$K,可能不是您想要的。 while [$k -ne $SDATE]

您需要具备的内容如下:
while [ $k -ne $SDATE ]

答案 2 :(得分:0)

啊,shell编程非常敏感......

k=0
while [ $k != 4 ]; do echo $k; k=`expr $k + 1`; done

按预期在不同的行上工作并打印0,1,2,3,这基本上看起来就像空格,换行符和值的来源一样。也许它是一个字符串与值的问题,但我不认为shell变量有类型。

我会尝试剥离你所拥有的东西,直到它起作用然后再添加你想要它做的事情。