#bash #shell #loops #for-loop
#bash #оболочка #циклы #цикл for
Вопрос:
Для работы я добился следующего:
i=0
for log in $(ls -1dt import*.log)
do
((i ))
if [ $i -gt 3 ]; then
rm -rf $log
fi
done
Он выдает: "syntax error near unexpected token 'do' "
Кто-нибудь может помочь?
Комментарии:
1. является ли это сценарием bash?
2. Взлеты… Извините! Да, это скрипт bash «#!/bin/bash»
3. Может ли это быть связано с этим ?
4. Может ли быть так, что ваш скрипт имеет окончание строки Windows (CR LF)?
5. Кстати, в любом случае это неправильный способ перебора списка файлов; см. Bash FAQ 001 .
Ответ №1:
Простая логика, позволяющая сделать то же самое без синтаксического анализа ls
—
stat -c "%Y %n" import*.log | # list last modification and filename
sort -rn | # sort reverse numeric on mod time
while read es fn; # read the timestamp and the filename
do if (( latest <= 3 )); # count each file found, for 1st 3
then continue; # do nothing, skipping them
else rm -f "$fn"; # -r for recurse only needed on dir's
fi;
done
Комментарии:
1. Но вам все равно придется обрабатывать окончания строк CRLF.