Цель:
- Изучить теоретическую часть лабораторной работы.
- В консольном режиме создать в домашнем каталоге подкаталог: /номер_группы/фамилия_студента, где в дальнейшем будут храниться все рабочие файлы студента.
- В любом текстовом редакторе (например, vim: vim 1.c) написать программу 1.c, выводящую на экран фразу "HELLO Ubuntu". Компилировать полученную программу компилятором gcc: gcc 1.c –o 1.exe. Запустить полученный файл 1.exe на выполнение: ./1.exe
- Написать скрипт, выводящий на консоль и в файл все аргументы командной строки.
- Написать скрипт, выводящий в файл (имя файла задаётся пользователем в качестве первого аргумента командной строки) имена всех файлов с заданным расширением (третий аргумент командной строки) из заданного каталога (имя каталога задаётся пользователем в качестве второго аргумента командной строки).
- Написать скрипт, компилирующий и запускающий программу (имя исходного файла и exe- файла результата задаётся пользователем в качестве аргументов командной строки). В случае ошибок при компиляции вывести на консоль сообщение об ошибках и не запускать программу на выполнение.
- Выполнить индивидуальное задание.
Задача:
- Написать скрипт для поиска файлов заданного размера в заданном каталоге (имя каталога задаётся пользователем в качестве третьего аргумента командной строки). Диапазон (min - max) размеров файлов задаётся пользователем в качестве первого и второго аргумента командной строки.
- Написать скрипт с использованием цикла for, выводящий на консоль размеры и права доступа для всех файлов в заданном каталоге и всех его подкаталогах (имя каталога задается пользователем в качестве первого аргумента командной строки).
- Написать скрипт для поиска заданной пользователем строки во всех файлах заданного каталога и всех его подкаталогах (строка и имя каталога задаются пользователем в качестве первого и второго аргумента командной строки). На консоль выводятся полный путь и имена файлов, в содержимом которых присутствует заданная строка, и их размер. Если к какому-либо каталогу нет доступа, необходимо вывести соответсвующее сообщение и продолжить выполнение.
- Написать скрипт поиска одинаковых по их содержимому файлов в двух каталогах, например, Dir1 и Dir2. Пользователь задаёт имена Dir1 и Dir2 в качестве первого и второго аргумента командной строки. В результате работы программы файлы, имеющиеся в Dir1, сравниваются с файлами в Dir2 по их содержимому. На экран выводятся число просмотренных файлов и результаты сравнения.
- Написать скрипт, находящий в заданном каталоге и всех его подкаталогах все файлы, владельцем которых является заданный пользователь. Имя владельца и каталог задаются пользователем в качестве первого и второго аргумента командной строки. Скрипт выводит результаты в файл (третий аргумент командной строки) в виде "полный путь, имя файла, его размер". На консоль выводится общее число просмотренных файлов.
- Написать скрипт, находящий в заданном каталоге и всех его подкаталогах все файлы заданного размера и принадлежащие определенному пользователю. Диапазон (min - max) размеров файлов задаётся пользователем в качестве первого и второго аргумента командной строки. Имя владельца и каталог задаются пользователем в качестве третьего и четвертого аргумента командной строки. Скрипт выводит результаты поиска в файл (пятый аргумент командной строки) в виде "полный путь, имя файла, его размер". На консоль выводится общее число просмотренных файлов.
- Написать скрипт, подсчитывающий суммарный размер файлов в заданном каталоге и всех его подкаталогах (имя каталога задаётся пользователем в качестве первого аргумента командной строки). Скрипт выводит результаты подсчета в файл (второй аргумент командной строки) в виде "каталог (полный путь), суммарный размер файлов, число просмотренных файлов".
Работа с файловой системой при помощи bash-скриптов
Пример скрипта, выводящего содержимое текущего каталога на консоль и в файл:
#!/bin/bash
dir
dir > 1.txt
Любой bash-скрипт должен начинаться со строки:
#!/bin/bash
в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте, поменяйте её на ваш путь.
Коментарии начинаются с символа # (кроме первой строки).
Переменные
Следующие переменные используются командным интерпретатором.
• $0, $1, $2, $3... - значения аргументов командной строки при запуске скрипта. Где $0 - имя самого файла скрипта, $1 - первый аргумент, $2 - второй аргумент, и т. д.
• $@ - все аргументы командной строки, каждый в кавычках.
• $# - количество аргументов командной строки.
• $? - код возврата последней команды.
Пример простого скрипта, выводящего на консоль и в файл содержимое каталога, где имя каталога передаётся скрипту в качестве аргументов при запуске:
#!/bin/bash
dir $1
dir $1 > 1.txt
Запуск скрипта: ./script.sh ~/test_catalog
Можно создать собственную переменную и присвоить ей значение:
A=121
A="121"
let A=121
let "A=А+1"
Вывод значения на консоль:
echo $A
Пример скрипта с переменными:
#!/bin/bash
# указываем где у нас хранится bash-интерпретатор
parametr1=$1
# присваиваем переменной parametr1 значение первого параметра скрипта
script_name=$0
# присваиваем переменной script_name значение имени скрипта
echo "Вы запустили скрипт с именем $script_name и параметром $parametr1"
# команда echo выводит определенную строку, обращение к переменным осуществляется через $имя_переменной.
echo 'Вы запустили скрипт с именем $script_name и параметром $parametr1'
# здесь мы видим другие кавычки. Разница в том, что в одинарных кавычках не происходит подстановки переменных.
exit 0
# выход с кодом 0 (удачное завершение работы скрипта)