проблема с циклом while - PullRequest
       27

проблема с циклом while

0 голосов
/ 23 сентября 2011

вот сценарий, который я написал, но, похоже, у него проблемы с while! пока предположим, что сравниваем содержимое 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 ]

1 голос
/ 24 сентября 2011

Проблема в том, что у вас нет пробелов вокруг [ или ].Это приводит к тому, что BASH неправильно анализирует строку.

В следующей строке BASH попытается запустить программу [$K, возможно, не то, что вы намереваетесь.while [$k -ne $SDATE]

Вам необходимо следующее:
while [ $k -ne $SDATE ]

1 голос
/ 23 сентября 2011

Попробуйте это:

while [[ $k != $SDATE ]]
0 голосов
/ 24 сентября 2011

Ах, программирование оболочки так обидно ...

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

Работает и печатает 0, 1, 2, 3 на отдельных строках, как и ожидалось, и это, по сути, похоже на то, что у вас есть, за исключением пробелов, переносов строк и источников значений. Возможно, это проблема строки и значения, но я не думал, что переменные оболочки имеют типы.

Я бы попробовал раздеть то, что у тебя есть, до тех пор, пока оно не заработало, и затем добавить обратно то, что ты хочешь, чтобы оно делало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...