Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Название:Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание
- Автор:
- Жанр:
- Издательство:Питер
- Год:2017
- Город:СПб.
- ISBN:978-5-496-03029-8
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дейв Тейлор - Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание краткое содержание
Цель этой книги — продемонстрировать практические приемы программирования сценариев на bash и познакомить с самыми распространенными утилитами на коротких и компактных примерах, не вдаваясь в излишние подробности. Экспериментируйте с этими сценариями — ломайте, исправляйте и приспосабливайте их под свои нужды, чтобы понять, как они работают. Только так вы сможете решать самые сложные задачи.
Сценарии командной оболочки. Linux, OS X и Unix. 2-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Усовершенствование сценария
Возможность узнать время в любом часовом поясе по всему миру очень полезна, особенно для администраторов, управляющих глобальными сетями. Но иногда требуется всего лишь узнать разницу во времени между двумя часовыми поясами. Эту функциональность можно было бы добавить в сценарий timein. Или же написать новый сценарий, например, с именем tzdiff, использующий timein, который принимает два аргумента вместо одного.
Задействуя оба аргумента, сценарий мог бы определять текущее время в обоих часовых поясах и затем выводить разницу между ними. Но имейте в виду, что двухчасовая разница между двумя часовыми поясами может быть на два часа вперед или на два часа назад . Различать два этих случая особенно важно для создания по-настоящему полезного сценария.
Глава 3. Создание утилит
Одна из основных целей создания сценариев командной оболочки — перенести сложные команды в файл, где их легко воспроизвести и изменить. Поэтому неудивительно, что на протяжении всей книги рассматриваются пользовательские команды. Но удивительно, что нам не требуется писать обертки для каждой отдельной команды в системах Linux, Solaris и OS X.
Linux/Unix — единственная из основных операционных систем, где можно решить, что флаги по умолчанию не отвечают вашим потребностям, и исправить положение несколькими нажатиями клавиш или сымитировать поведение понравившейся утилиты из другой операционной системы, определив псевдоним или написав сценарий длиной в десяток строк. Именно это делает систему Unix такой дружелюбной, и именно это вдохновило нас написать книгу, которую вы держите в руках!
№ 22. Утилита для напоминания
В распоряжении пользователей Windows и Mac уже много лет имеются превосходные и простые утилиты, такие как Stickies, позволяющие сохранять короткие заметки и выводить напоминания на экран. Они прекрасно подходят для быстрой записи телефонных номеров или другой информации. К сожалению, в командной строке Unix нет аналогичной программы для создания заметок, но эту проблему легко решить парой сценариев.
Первый сценарий, remember (приводится в листинге 3.1), позволяет сохранить заметку в общем файле rememberfile в домашнем каталоге. Если вызвать этот сценарий без аргументов, он будет читать стандартный ввод, пока не встретит символ конца файла ( ^D), который вводится комбинацией ctrl-D. Если вызвать сценарий с аргументами, он запишет их прямо в файл с данными.
Вторая половина описываемой двоицы −remindme, сопутствующий сценарий, представленный в листинге 3.2, который либо выводит все содержимое файла rememberfile, когда запускается без аргументов, либо отображает результаты поиска, используя аргументы как шаблон.
Код
Листинг 3.1.Сценарий remember
··#!/bin/bash
··# remember — простой блокнот для записи заметок из командной строки
··rememberfile="$HOME/.remember"
··if [$# −eq 0]; then
····# Предложить пользователю ввести заметку и добавить ее в конец
····#·· файла rememberfile.
····echo "Enter note, end with ^D: "
····cat — >> $rememberfile
··else
····# Записать в конец файла. remember все полученные аргументы.
····echo "$@" >> $rememberfile
··fi
··exit 0
В листинге 3.2 приводится сопутствующий сценарий remindme.
Листинг 3.2.Сценарий remindme, сопутствующий сценарию remember из листинга 3.1
#!/bin/bash
# remindme — ищет в файле с данными совпадения с заданным шаблоном или, если
#·· запускается без аргументов, выводит все содержимое файла
rememberfile="$HOME/.remember"
if [! -f $rememberfile]; then
··echo "$0: You don't seem to have a.remember file. " >&2
··echo "To remedy this, please use 'remember' to add reminders" >&2
··exit 1
fi
if [$# −eq 0]; then
··# Вывести все содержимое rememberfile, если критерии поиска не заданы.
··more $rememberfile
else
··# Иначе выполнить поиск в файле по заданному критерию и вывести
··#·· результаты.
··grep −i — "$@" $rememberfile | ${PAGER:-more}
fi
exit 0
Как это работает
Сценарий remember в листинге 3.1 может действовать как интерактивная программа, предлагающая пользователю ввести текст заметки для запоминания, или как команда, сохраняющая свои аргументы командной строки. На случай, если пользователь запустит сценарий без аргументов, мы предусмотрели одну хитрость. После вывода сообщения с предложением ввести заметку, мы вызываем команду cat, чтобы прочитать ввод пользователя :
cat — >> $rememberfile
В предыдущих главах нам доводилось использовать команду read, чтобы получить ввод пользователя. Здесь же команда cat читает текст из stdin (дефис — в команде является коротким обозначением stdin или stdout, в зависимости от контекста), пока пользователь не нажмет комбинацию ctrl-D, которая сообщит утилите cat о завершении файла. После этого cat выведет текст, прочитанный из stdin, и добавит его в конец файла rememberfile.
Однако, если сценарий запустить с аргументами, он просто добавит их все в конец rememberfile .
Сценарий remindme в листинге 3.2 не может работать в отсутствие файла rememberfile, поэтому в самом начале, перед попыткой что-либо сделать, он проверяет его наличие. Если файл отсутствует, сценарий завершается с выводом сообщения о причине остановки.
Если сценарий запущен без аргументов, предполагается, что пользователь просто захотел увидеть содержимое rememberfile. Использование утилиты more позволяет организовать постраничный просмотр файла rememberfile .
Если сценарий запущен с аргументами, вызывается утилита grep, чтобы найти совпадения с указанным шаблоном в rememberfile без учета регистра символов, а затем результаты выводятся с помощью утилиты постраничного просмотра .
Запуск сценария
Чтобы воспользоваться утилитой remindme, сначала нужно добавить несколько заметок в файл rememberfile, запустив сценарий remember, как показано в листинге 3.3. После этого можно с помощью remindme выполнить поиск в получившейся базе данных, передав сценарию искомый шаблон.
Результаты
Листинг 3.3.Тестирование сценария remember
$ remember Southwest Airlines: 800-IFLYSWA
$ remember
Enter note, end with ^D:
Find Dave’s film reviews at http://www.DaveOnFilm.com/
Интервал:
Закладка: