Дейв Тейлор - Сценарии командной оболочки. 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-е издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
^D
Затем, когда спустя несколько месяцев вам потребуется вспомнить текст заметки, вы сможете сделать это с помощью reminder, как показано в листинге 3.4.
Листинг 3.4.Тестирование сценария remindme
$ remindme film reviews
Find Dave’s film reviews at http://www.DaveOnFilm.com/
Или, если вы не можете быстро вспомнить номер телефона, из которого известны только цифры 800, листинг 3.5 демонстрирует, как выполнить поиск по частично известному номеру.
Листинг 3.5.Поиск номера телефона по известной последовательности цифр с помощью сценария remindme
$ remindme 800
Southwest Airlines: 800-IFLYSWA
Усовершенствование сценария
Конечно, не каждый сценарий демонстрирует чудеса программирования, но эти два сценария наглядно показывают, насколько легко расширить возможности командной строки Unix. Чтобы вы себе ни вообразили, наверняка найдется простой способ реализовать это.
В рассмотренные сценарии можно внести много разных усовершенствований. Например, ввести понятие записей : сценарий remember снабжает каждую запись датой и временем, многострочный текст сохраняется как одна запись, а поиск выполняется с использованием регулярных выражений. Такой подход позволит сохранять телефонные номера для групп людей и получать их, помня имя хотя бы одного члена группы. Если вы действительно задумаетесь над усовершенствованием сценария, можете добавить также функцию редактирования и удаления записей. Хотя, с другой стороны, файл ~/.remember легко отредактировать с помощью любого текстового редактора.
№ 23. Интерактивный калькулятор
Если вы помните, scriptbc (сценарий № 9 в главе 1) позволял вызывать калькулятор bc для вычисления выражений, передаваемых в виде аргументов командной строки. Следующий логичный шаг — написать сценарий-обертку, превращающую сценарий scriptbc в интерактивный калькулятор командной строки. Сценарий (приводится в листинге 3.6) получился действительно очень коротким! Но чтобы он заработал, не забудьте поместить сценарий scriptbc в один из каталогов из списка PATH.
Код
Листинг 3.6.Сценарий калькулятора командной строки calc
··#!/bin/bash
··# calc — калькулятор командной строки, который действует как интерфейс к bc
··scale=2
··show_help()
··{
····cat << EOF
······In addition to standard math functions, calc also supports:
······a % b····remainder of a/b
······a ^ b····exponential: a raised to the b power
······s(x)···· sine of x, x in radians
······c(x)···· cosine of x, x in radians
······a(x)···· arctangent of x, in radians
······l(x)···· natural log of x
······e(x)···· exponential log of raising e to the x
······j(n,x)·· Bessel function of integer order n of x
······scale N··show N fractional digits (default = 2)
··EOF
··}
··if [$# −gt 0]; then
····exec scriptbc "$@"
··fi
··echo "Calc-a simple calculator. Enter 'help' for help, 'quit' to quit."
··/bin/echo −n "calc> "
··while read command args
··do
····case $command
····in
······quit|exit) exit 0································;;
······help|\?)·· show_help····························;;
······scale)···· scale=$args··························;;
······*)········ scriptbc −p $scale "$command" "$args";;
····esac
····/bin/echo −n "calc> "
··done
··echo ""
··exit 0
Как это работает
Самая интересная часть в этом сценарии — инструкция while read , которая образует бесконечный цикл, отображающий приглашение calc>, пока пользователь не завершит работу вводом команды quit или признака конца файла ( ^D). Лаконичность сценария делает его особенно примечательным: сценарии командной строки должны быть простыми и практичными!
Запуск сценария
Сценарий использует scriptbc, калькулятор, который мы написали в сценарии № 9, поэтому, прежде чем запускать его, не забудьте поместить scriptbc в один из каталогов, перечисленных в списке PATH (или добавьте в сценарий переменную, например $scriptbc, содержащую полный путь к сценарию). По умолчанию данный сценарий выполняется в интерактивном режиме, предлагая пользователю вводить выражения для вычисления. Если запустить его с аргументами, эти аргументы будут переданы непосредственно сценарию scriptbc. В листинге 3.7 показаны оба способа использования сценария.
Результаты
Листинг 3.7.Тестирование сценария calc
$ calc 150 / 3.5
42.85
$ calc
Calc −a simple calculator. Enter 'help’ for help, 'quit’ to quit.
calc> help
··In addition to standard math functions, calc also supports:
··a % b···· remainder of a/b
··a ^ b···· exponential: a raised to the b power
··s(x)······sine of x, x in radians
··c(x)······cosine of x, x in radians
··a(x)······arctangent of x, in radians
··l(x)······natural log of x
··e(x)······exponential log of raising e to the x
··j(n,x)····Bessel function of integer order n of x
··scale N·· show N fractional digits (default = 2)
calc> 54354 ^ 3
160581137553864
calc> quit
$
Вычисления с вещественными числами, даже простые для человека, могут быть сложными для компьютеров. К сожалению, команда bc иногда реагирует на такие сложности самым неожиданным образом. Например, запустите bc и введите scale=0 и затем 7 % 3. А теперь попробуйте вычислить то же выражение с scale=4. В результате вы получите.0001, что, очевидно, является ошибкой.
Усовершенствование сценария
Все, что можно сделать в bc, можно сделать и в этом сценарии, с той лишь разницей, что calc не имеет памяти команд или состояний. Попробуйте добавить больше математических функций в справочное сообщение. Например, переменные obase и ibase позволяют определить основание системы счисления для вывода и ввода, однако из-за того, что сценарий не имеет памяти команд, вам придется изменить scriptbc (сценарий № 9 в главе 1) или научиться вводить настройки и выражения в одной строке.
№ 24. Преобразование температур
Сценарий в листинге 3.8 — первый в книге, выполняющий сложные математические вычисления, — может преобразовывать значение температуры в градусы Фаренгейта, Цельсия и Кельвина. В нем используется тот же трюк передачи выражений для вычисления калькулятору bc, что и в сценарии № 9, в главе 1.
Код
Листинг 3.8.Сценарий convertatemp
··#!/bin/bash
··# convertatemp — сценарий преобразования температуры, позволяющий вводить
··#·· температуру в градусах Фаренгейта, Цельсия или Кельвина и получать
··#·· эквивалентную температуру в двух других шкалах
··if [$# −eq 0]; then
Интервал:
Закладка: