Резюме (Chapter Review)¶
Резюме¶
В этой главе было рассмотрено создание базовых сценариев оболочки в системе Linux. Сценарий оболочки (shell script) — это текстовый файл, интерпретируемый и выполняемый оболочкой bash. Сценарий оболочки содержит набор команд, автоматизирующих задачи и обрабатывающих данные. Сценарий оболочки состоит из следующих частей:
#!/bin/bash#Комментарии- команды оболочки
exit 0
Сценарии оболочки можно создавать и редактировать в любом текстовом редакторе. Их можно выполнять двумя способами:
- Ввести
/bin/bash имя_файла_сценария. - Добавить право на выполнение файлу сценария с помощью утилиты
chmod, а затем ввести имя файла сценария в командной строке.
Кроме того, можно добавить путь к файлу сценария в переменную окружения PATH пользователей, чтобы им не приходилось запоминать полный путь. В качестве альтернативы можно переместить файл сценария в каталог, уже включённый в переменную окружения PATH пользователей, например ~/bin.
Помимо выполнения команд из сценария, можно также считывать ввод от пользователя и присваивать его переменной с помощью команды read имя_переменной в сценарии. Переменные сценария не нужно объявлять, если в них будет записываться текст. Однако если необходимо считывать числа в переменную, которая будет обрабатываться именно как числа (например, для выполнения арифметических операций), нужно предварительно объявить её с помощью команды declare -i имя_переменной в сценарии.
В сценариях также можно использовать управляющие конструкции. Управляющие конструкции позволяют настроить сценарий так, чтобы он ветвился или выполнял циклы в зависимости от заданных условий. Для создания сценария с двумя ветвями выполнения можно использовать конструкцию if/then/else. Если указанное в конструкции условие истинно, выполняется один набор команд (под then). Если условие ложно, выполняются команды под частью else. Синтаксис конструкции if/then/else в сценарии:
Для проверки условия в конструкции if/then/else можно использовать команду test. Команда test поддерживает следующие параметры:
-d— Проверяет, существует ли указанный файл и является ли он каталогом.-e— Проверяет, существует ли указанный файл, независимо от того, является он файлом или каталогом.-f— Проверяет, существует ли указанный файл и является ли он обычным файлом.-G— Проверяет, существует ли указанный файл и принадлежит ли он указанной группе.-hили-L— Проверяет, существует ли указанный файл и является ли он символьной ссылкой.-O— Проверяет, существует ли указанный файл и принадлежит ли он указанному идентификатору пользователя.-r— Проверяет, существует ли указанный файл и предоставлено ли право на чтение.-w— Проверяет, существует ли указанный файл и предоставлено ли право на запись.-x— Проверяет, существует ли указанный файл и предоставлено ли право на выполнение.
Если в сценарии требуется более двух ветвей, можно использовать конструкцию case. Конструкция case — это расширенный вариант оператора if/then/else. С помощью конструкции case можно вычислить несколько условий и выполнять команды в зависимости от того, какое из них истинно. Конструкция case удобна как замена нескольких операторов if/then/else в сценарии. Синтаксис конструкции case:
В сценарии оболочки можно также использовать конструкции цикла. Конструкции цикла бывают трёх видов: цикл while, цикл until и цикл for.
Структура цикла while:
Цикл while будет выполняться снова и снова до тех пор, пока условие не примет значение «ложь».
В сценарии можно использовать также цикл until. Цикл until выполняется снова и снова до тех пор, пока условие является ложным. Как только условие принимает значение «истина», цикл завершается. Структура цикла until:
Можно также использовать цикл for, который выполняется заданное число раз. Для создания числовой последовательности, определяющей количество итераций цикла for, широко применяется команда seq. Команда seq поддерживает три варианта создания числовой последовательности:
- Если указано одно значение, последовательность начинается с единицы, увеличивается на единицу и заканчивается на указанном значении.
- Если указаны два значения, последовательность начинается с первого значения, увеличивается на единицу и заканчивается на втором значении.
- Если указаны три значения, последовательность начинается с первого значения, увеличивается на второе значение и заканчивается на третьем значении.
Далее была рассмотрена обработка текстовых потоков для управления и изменения текста внутри сценария или конвейера. Были изучены следующие утилиты:
cut— Командаcutиспользуется для вывода на стандартный вывод указанных столбцов или полей из файла. По умолчанию в качестве разделителя используется символ табуляции.expandиunexpand— Командаexpandобрабатывает текстовый поток и удаляет все символы табуляции, заменяя их указанным числом пробелов (по умолчанию восемью). Командаunexpandработает в противоположном направлении — преобразует пробелы в текстовом потоке обратно в символы табуляции.fmt— Командаfmtиспользуется для переформатирования текстового файла.joinиpaste— Командаjoinвыводит строку из каждого из двух указанных входных файлов, у которых совпадают поля объединения. Первое поле является полем объединения по умолчанию, разделённым пробельным символом. Командаpasteработает аналогично командеjoin— она соединяет соответствующие строки из одного или нескольких файлов в столбцы. По умолчанию для разделения столбцов используется символ табуляции.nl— Командаnlопределяет количество строк в файле. При выполнении команды к выводу добавляется номер строки в начало каждой строки файла.od— Командаod(octal dump) используется для вывода дампа файла, в том числе двоичных файлов. Эта утилита поддерживает вывод в нескольких форматах: восьмеричном, десятичном, с плавающей точкой, шестнадцатеричном и символьном.pr— Командаprиспользуется для форматирования текстовых файлов перед печатью. Она форматирует файл с разбивкой на страницы, заголовками и столбцами. Заголовок содержит дату и время, имя файла и номер страницы.sedиawk— Утилитаsedявляется потоковым редактором. Она может использоваться для редактирования текста, поступающего из стандартного вывода другой команды. С помощью параметров командной строки можно выполнять поиск и замену, удалять текст и отображать результат на экране или записывать в файл. Командаawkтакже может использоваться для обработки текстового потока. Утилитаawkрассматривает каждую строку, поступающую на её стандартный ввод, как запись. Каждое слово в строке считается полем. С помощьюawkможно обращаться к конкретному полю (слову) в конкретной записи (строке).sort— Командаsortсортирует строки текстового файла в алфавитном порядке.split— Командаsplitразбивает входной файл на серию файлов (без изменения исходного файла).tr— Командаtrиспользуется для преобразования или удаления символов.uniq— Командаuniqвыводит или пропускает повторяющиеся строки.wc— Командаwcвыводит количество символов новой строки, слов и байтов в файле.
В заключение были рассмотрены подстановка команд и функции. Оболочка bash позволяет выполнить команду и вставить её вывод обратно в командную строку в качестве аргумента для другой команды. Это называется подстановкой команд (command substitution). В ситуациях, когда первая команда передаёт второй слишком много данных, можно использовать команду xargs для разбивки вывода на обрабатываемые фрагменты по 128 КБ.
Также были рассмотрены функции. Оболочка bash позволяет определять функции, которые можно использовать как из командной строки, так и внутри сценария. Определяя функцию, вы создаёте новую команду, которую можно вызывать и использовать как обычную внутреннюю или внешнюю команду. Функция содержит список команд для выполнения. Внутри функции можно использовать управляющие конструкции (такие как if/then/else).
Ускоренный обзор (Accelerated Review)¶
- Сценарии оболочки — это текстовые файлы, содержащие различные команды для автоматизации задач и обработки данных.
- Все сценарии оболочки начинаются с
#!/bin/bash, указывающего, что для выполнения сценария следует использовать оболочку bash. - В начало каждого сценария следует добавлять комментарий с описанием его назначения.
- Сценарии оболочки должны заканчиваться командой
exit 0. - Сценарии оболочки можно запускать, выполнив
/bin/bash имя_файла_сценария, или добавив право на выполнение файлу сценария. - Пользовательский ввод в сценарии можно считывать с помощью команды
read имя_переменной. - Для расширения возможностей сценариев в них можно добавлять ветвящиеся конструкции.
- Управляющие конструкции позволяют настроить сценарий так, чтобы он ветвился или выполнял циклы в соответствии с заданными условиями.
- Для создания сценария с двумя ветвями выполнения можно использовать конструкцию if/then/else.
- Если указанное в конструкции условие истинно, выполняется один набор команд (под
then). - Если условие ложно, выполняются команды под частью
else. - Для проверки условия в конструкции if/then/else можно использовать команду
test. - Если требуется более двух ветвей, можно использовать конструкцию
case. - Конструкция
caseпозволяет вычислять несколько условий и выполнять набор команд в зависимости от того, какое из них истинно. - В сценарии оболочки можно также использовать конструкции цикла.
- Конструкции цикла бывают трёх видов: цикл
while, циклuntilи циклfor. - Цикл
whileвыполняется снова и снова до тех пор, пока указанное условие не примет значение «ложь». - В сценарии можно использовать также цикл
until. - Цикл
untilвыполняется снова и снова до тех пор, пока условие является ложным. Как только условие принимает значение «истина», цикл завершается. - Можно использовать также цикл
for, который выполняется заданное число раз. - Для создания числовой последовательности, определяющей количество итераций цикла
for, широко применяется командаseq. - Команда
seqподдерживает три варианта создания числовой последовательности:- Если указано одно значение, последовательность начинается с единицы, увеличивается на единицу и заканчивается на указанном значении.
- Если указаны два значения, последовательность начинается с первого значения, увеличивается на единицу и заканчивается на втором значении.
- Если указаны три значения, последовательность начинается с первого значения, увеличивается на второе значение и заканчивается на третьем значении.
- Обработка текстовых потоков позволяет управлять и изменять текст внутри сценария или конвейера.
- Для обработки текстового потока можно использовать следующие утилиты:
cut,expand,unexpand,fmt,join,paste,nl,od,pr,sed,awk,sort,split,tr,uniq,wc. - Подстановка команд позволяет выполнить команду и вставить её вывод обратно в командную строку в качестве аргумента для другой команды.
- Команда
xargsпозволяет разбивать вывод на обрабатываемые фрагменты по 128 КБ. - Можно определять собственные функции, используемые как из командной строки, так и внутри сценария.
- Определение функции создаёт новую команду, которую можно вызывать и использовать как обычную внутреннюю или внешнюю команду.