Пример 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".
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
30.11. Сервер TCP с предварительным порождением потоков, каждый из которых вызывает accept
30.11. Сервер TCP с предварительным порождением потоков, каждый из которых вызывает accept Ранее в этой главе мы обнаружили, что версии, в которых заранее создается пул дочерних процессов, работают быстрее, чем те, в которых для каждого клиентского запроса приходится вызывать
30.12. Сервер с предварительным порождением потоков: основной поток вызывает функцию accept
30.12. Сервер с предварительным порождением потоков: основной поток вызывает функцию accept Последняя рассматриваемая нами версия сервера устроена следующим образом: главный поток создает пул потоков при запуске сервера, после чего он же вызывает функцию accept и передает
Итак, ценность – это…?
Итак, ценность – это…? По словам Моханбира Сохни, ценность всего, что можно встретить в Интернете, существует только в уме пользователя. Он решает, что какая-либо ценность ему нужна, и заглядывает на ваш сайт в надежде ее найти.Ну а теперь задайте себе вопрос: способна ли
Ценность
Ценность Картинки, создающие у клиента представление о ценности, не обязательно должны относиться к конкретным товарам. Они могут передавать ценность вашего сайта в целом. Посмотрите, как использует эту возможность компания ClickTracks, работающая в области
Правило 5: Какие функции C++ создает и вызывает молча
Правило 5: Какие функции C++ создает и вызывает молча Когда пустой класс перестает быть пустым? Когда за него берется C++. Если вы не объявите конструктор копирования, оператор присваивания или деструктор самостоятельно, то компилятор сделает это за вас. Более того, если вы
Пример 2-1. cleanup: Сценарий очистки лог-файлов в /var/log
Пример 2-1. cleanup: Сценарий очистки лог-файлов в /var/log # cleanup# Для работы сценария требуются права root.cd /var/logcat /dev/null > messagescat /dev/null > wtmpecho "Лог-файлы очищены."Здесь нет ничего необычного, это простая последовательность команд, которая может быть набрана в командной строке с
Пример 11-23. Сценарий, завершающий себя сам с помощью команды kill
Пример 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
Новости: Имеющий уши да услышит
Новости: Имеющий уши да услышит Автор: Алексей ЛевинАмериканская разведка еще за полгода до начала вторжения в Ирак точно знала, что эта страна не имеет оружия массового поражения и не располагает научными и индустриальными ресурсами, позволяющими начать его разработку
Коммерческая ценность
Коммерческая ценность Собираясь производить снимки на продажу, создавайте снимки на продажу. Не на выставку почитателей импрессионизма, а именно на продажу. Вы, по сути, являетесь рекламным фотографом, а значит, от вас ждут замечательных снимков, которые могут заставить