Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Скрипты BASH  (Прочитано 3332 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Robotex

  • Автор темы
  • Любитель
  • *
  • Сообщений: 85
    • Просмотр профиля
Скрипты BASH
« : 22 Декабря 2008, 22:15:51 »
Пишу скрипт, задание вот такое:
Цитировать
Вывод списка файлов заданного каталога с возможностью сортировки по размеру, имени, владельцу.
Отслеживание появления и исчезновения файлов, размер которых лежит в заданном диапазоне. Выводить для каждого файла признак «появился», «исчез», размер и кол-во строк в файле. Выход из цикла анализа при появлении в текущем каталоге пустого файла с именем stop.
Вывод текущего времени на экран.
Сделал полдела, но скрипт не работает.
Пишет, что неверная команда 3 (насколько понял количество файлов) в строке  while [ $j -lt $filescount2 ]
#!/bin/bash
i=0
for file in *
do
if [ -f $file ]
then
filenames[$i]=$file
i=`expr $i + 1`
fi
done
filescount=$i
while :
do
 clear
echo -n "-------------------------- "
echo -n `date +%d.%m.%Y`
echo -n " --- "
echo -n `date +%H:%M:%S`
echo " --------------------------"
order="\$1"
desc="-r"
i=0;
j=2;
 for file in *
 do
if [ -f $file ]
then
var="head -$j"
filenames2[$i]=$file
fileowners[$i]=`ls -l | awk '{print $3}' | $var | tail -1`
filesizes[$i]=`ls -l | awk '{print $5}' | $var | tail -1`
lines[$i]=`wc -l $file | awk '{print $1}'`
echo "${filenames2[$i]} ${fileowners[$i]} ${filesizes[$i]} ${lines[$i]}"
i=`expr $i + 1`
fi
j=`expr $j + 1`
 done
 filescount2=$i
 i=0
 j=0
 while [ $j -lt $filescount2 ]
 do
 if [ ${filescount[$i]} -lt ${filescount2[$j]} ]
 then
 echo "yest'"
 i=`expr $i + 1`
 fi
 j=`expr $i + 1`
 done
#ls -l | sort $8 $desc | awk '{print $8,$3,$5}'
echo "-----------------------------------------------------------------------------"
 sleep $1
done

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Скрипты BASH
« Ответ #1 : 23 Декабря 2008, 10:54:57 »
Там дальше по тексту идут обращения к filescount2 как к массиву.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Скрипты BASH
« Ответ #2 : 23 Декабря 2008, 16:08:06 »
Аналогичная задача уже решена

http://brianin3d.wordpress.com/2008/11/04/poll-directory-for-changes/
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Robotex

  • Автор темы
  • Любитель
  • *
  • Сообщений: 85
    • Просмотр профиля
Re: Скрипты BASH
« Ответ #3 : 23 Декабря 2008, 19:05:09 »
Там дальше по тексту идут обращения к filescount2 как к массиву.
блин, вот я дебил. Проглядел. Благодарствую
Цитировать
Аналогичная задача уже решена

http://brianin3d.wordpress.com/2008/11/04/poll-directory-for-changes/
Прошу меня извинить, я не сплю (нет времени), так что не совсем понимаю, что там. Оно отслеживает изменения в директории и подсчитывает ее размер?

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Скрипты BASH
« Ответ #4 : 24 Декабря 2008, 13:42:18 »
Изменения отслеживаются, размер не подсчитывается.

Для отслеживания изменений используются команды find (получить список файлов), stat (получить их свойства) и sha1sum (завернуть вывод stat в одну длинную строку шестнадцатиричных цифр) .
Это реализовано в функции  directory_sum().

Эта последовательность команд вызывается с интервалом в несколько секунд, результирующая строка сравнивается с предыдущей (функция directory_watcher() )

На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.111 секунд. Запросов: 23.