Всем привет!
Тут предыдущий урок
Поехали)
Задача: найти в директории файлы созданные позднее 100 дней и вывести список в файл. Дни, имя директории и имя списка передать как аргументы при запуске скрипта.
Решение:
#!/bin/bash
if (($# < 3))
then
echo "Usage: $0 {daysago} {directory} {outputfile}";
echo "Example: $0 100 ./ outputfile.txt";
exit
fi
daysago=$1
directory=$2
outputfile=$3
find $directory -iregex ".*" -type f -mtime +$daysago > $outputfile
Пояснение:
1. Встроенные переменные
Для передачи данных скриптам используем параметры командной строки. Вызвав скрипт с параметрами, мы передаём информацию, с которой он может работать.
list-old-files.sh
— наш скрипт
Вот его вывод при запуске без параметров
Вот основные встроенные переменные:
$0
— имя скрипта
$1 $2… $n
— параметры переданные скрипту, если надо параметров более 9, то используем конструкцию ${10}
$#
— кол-во параметров переданных скрипту
$$
— PID скрипта
Глянув текст скрипта все понятно 😀
2. Команда find
Find — это важная и часто используемая команда для поиска файлов и каталогов на основе специальных условий.
Базовый синтаксис команды выглядит следующим образом: find [параметры] [путь…] [выражение]
find $directory -iregex ".*" -type f -mtime +$daysago
Разберем параметры:
-iregex ".*"
— путь к файлу соответствует регулярному выражению без учета регистра (regex — с учетом регистра)
-type f
— искать только файлы
-mtime +$daysago
— поиск по времени модификации файла
3. Операторы ">"
и ">>"
Чаще всего используется перенаправление вывода команды в файл. Также можно направить вывод не только в файл, но и на вход другой команды или на устройство (например, принтер).
">"
— выводит в файл перезаписывая, создавая новый файл каждый раз
">>"
— выводит в файл создавая новый или дописывая содержимое к существующему файлу
> $outputfile
— объяснять нечего 😀
Стартуем скрипт с параметрами:
./list-old-files.sh 100 /var/spool/cups outputlist.txt
Содержимое outputlist.txt
Самп! А давай вместе учебник издадим! Ты будешь Bash скриптам обучать, а я тоже чему-нибудь нехорошему учить буду.
Что хуже консоли с башем может быть? 😀