Сценарий оболочки “для” синтаксиса цикла

#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.