Пример 33-7. Сценарий имеющий практическую ценность), который вызывает себя сам

Пример 33-7. Сценарий имеющий практическую ценность), который вызывает себя сам

#!/bin/bash

# pb.sh: телефонная книга

# Автор: Rick Boivie

# используется с его разрешения.

# Дополнен автором документа.

MINARGS=1 # Сценарию должен быть передан, по меньшей мере, один аргумент.

DATAFILE=./phonebook

PROGNAME=$0

E_NOARGS=70 # Ошибка, нет аргументов.

if [ $# -lt $MINARGS ]; then

echo "Порядок использования: "$PROGNAME" data"

exit $E_NOARGS

fi

if [ $# -eq $MINARGS ]; then

grep $1 "$DATAFILE"

else

( shift; "$PROGNAME" $* ) | grep $1

# Рекурсивный вызов.

fi

exit 0 # Сценарий завершает свою работу здесь.

# Далее следует пример файла телефонной книги

#+ в котором не используются символы комментария.

# ------------------------------------------------------------------------

# Пример файла телефонной книги

John Doe 1555 Main St., Baltimore, MD 21228 (410) 222-3333

Mary Moe 9899 Jones Blvd., Warren, NH 03787 (603) 898-3232

Richard Roe 856 E. 7th St., New York, NY 10009 (212) 333-4567

Sam Roe 956 E. 8th St., New York, NY 10009 (212) 444-5678

Zoe Zenobia 4481 N. Baker St., San Franciso, SF 94338 (415) 501-1631

# ------------------------------------------------------------------------

$bash pb.sh Roe

Richard Roe 856 E. 7th St., New York, NY 10009 (212) 333-4567

Sam Roe 956 E. 8th St., New York, NY 10009 (212) 444-5678

$bash pb.sh Roe Sam

Sam Roe 956 E. 8th St., New York, NY 10009 (212) 444-5678

# Если сценарию передаются несколько аргументов,

#+ то выводятся только те строки, которые содержат их все.

Слишком глубокая рекурсия может привести к исчерпанию пространства, выделенного под стек, и "вываливанию" сценария по "segfault".

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Новости: Имеющий уши да услышит

Из книги Журнал «Компьютерра» № 10 от 14 марта 2006 года автора Журнал «Компьютерра»

Новости: Имеющий уши да услышит Автор: Алексей ЛевинАмериканская разведка еще за полгода до начала вторжения в Ирак точно знала, что эта страна не имеет оружия массового поражения и не располагает научными и индустриальными ресурсами, позволяющими начать его разработку


Правило 5: Какие функции C++ создает и вызывает молча

Из книги Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ автора Мейерс Скотт

Правило 5: Какие функции C++ создает и вызывает молча Когда пустой класс перестает быть пустым? Когда за него берется C++. Если вы не объявите конструктор копирования, оператор присваивания или деструктор самостоятельно, то компилятор сделает это за вас. Более того, если вы


Итак, ценность – это…?

Из книги Добавьте в корзину. Ключевые принципы повышения конверсии веб-сайтов автора Айзенберг Джеффри

Итак, ценность – это…? По словам Моханбира Сохни, ценность всего, что можно встретить в Интернете, существует только в уме пользователя. Он решает, что какая-либо ценность ему нужна, и заглядывает на ваш сайт в надежде ее найти.Ну а теперь задайте себе вопрос: способна ли


Ценность

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Ценность Картинки, создающие у клиента представление о ценности, не обязательно должны относиться к конкретным товарам. Они могут передавать ценность вашего сайта в целом. Посмотрите, как использует эту возможность компания ClickTracks, работающая в области


Пример 2-1. cleanup: Сценарий очистки лог-файлов в /var/log

Из книги Как заработать на фотографии в Интернете автора Зьомко Ольга

Пример 2-1. cleanup: Сценарий очистки лог-файлов в /var/log # cleanup# Для работы сценария требуются права root.cd /var/logcat /dev/null > messagescat /dev/null > wtmpecho "Лог-файлы очищены."Здесь нет ничего необычного, это простая последовательность команд, которая может быть набрана в командной строке с


Пример 11-23. Сценарий, завершающий себя сам с помощью команды kill

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Пример 11-23. Сценарий, завершающий себя сам с помощью команды kill #!/bin/bash# self-destruct.shkill $$ # Сценарий завершает себя сам. # Надеюсь вы еще не забыли, что "$$" -- это PID сценария.echo "Эта строка никогда не будет выведена."# Вместо него на stdout будет выведено сообщение "Terminated".exit 0# Какой


Пример 29-1. Сценарий, содержащий ошибку

Из книги автора

Пример 29-1. Сценарий, содержащий ошибку #!/bin/bash# ex74.sh# Этот сценарий содержит ошибку.a=37if [$a -gt 27 ]then echo $afi exit 0В результате исполнения этого сценария вы получите такое сообщение:./ex74.sh: [37: command not foundЧто в этом сценарии может быть неправильно (подсказка: после ключевого слова


Пример 33-6. Сценарий (бесполезный), который вызывает себя сам

Из книги автора

Пример 33-6. Сценарий (бесполезный), который вызывает себя сам #!/bin/bash# recurse.sh# Может ли сценарий вызвать себя сам?# Да, но есть ли в этом смысл?RANGE=10MAXVAL=9i=$RANDOMlet "i %= $RANGE" # Генерация псевдослучайного числа в диапазоне 0 .. $MAXVAL.if [ "$i" -lt "$MAXVAL" ]then echo "i = $i" ./$0 # Сценарий запускает


Пример H-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки

Из книги автора

Пример H-2. viewdata.sh: Результат преобразования VIEWDATA.BAT в сценарий командной оболочки #!/bin/bash# Результат преобразования пакетного файла VIEWDATA.BAT в сценарий командной оболочки.DATAFILE=/home/bozo/datafiles/book-collection.dataARGNO=1# @ECHO OFF Эта команда здесь не нужна.if [ $# -lt "$ARGNO" ] # IF !%1==! GOTO VIEWDATAthen less


Коммерческая ценность

Из книги автора

Коммерческая ценность Собираясь производить снимки на продажу, создавайте снимки на продажу. Не на выставку почитателей импрессионизма, а именно на продажу. Вы, по сути, являетесь рекламным фотографом, а значит, от вас ждут замечательных снимков, которые могут заставить


30.11. Сервер TCP с предварительным порождением потоков, каждый из которых вызывает accept

Из книги автора

30.11. Сервер TCP с предварительным порождением потоков, каждый из которых вызывает accept Ранее в этой главе мы обнаружили, что версии, в которых заранее создается пул дочерних процессов, работают быстрее, чем те, в которых для каждого клиентского запроса приходится вызывать


30.12. Сервер с предварительным порождением потоков: основной поток вызывает функцию accept

Из книги автора

30.12. Сервер с предварительным порождением потоков: основной поток вызывает функцию accept Последняя рассматриваемая нами версия сервера устроена следующим образом: главный поток создает пул потоков при запуске сервера, после чего он же вызывает функцию accept и передает