Чтобы воспользоваться утилитой 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/
^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 показаны оба способа использования сценария.
Читать дальше