Чтение онлайн

ЖАНРЫ

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

Купер Мендель

Шрифт:

let "i += 1"

done

echo

}

initialize_Suits

{

Suits[0]=Т # Трефы

Suits[1]=Б # Бубны

Suits[2]=Ч # Червы

Suits[3]=П # Пики

}

initialize_Cards

{

Cards=(2 3 4 5 6 7 8 9 10 В Д K Т)

# Альтернативный способ инициализации массива.

}

pick_a_card

{

card_number=$RANDOM

let "card_number %= $CARDS"

if [ "${Deck[card_number]}" -eq $UNPICKED ]

then

Deck[card_number]=$PICKED

return $card_number

else

return $DUPE_CARD

fi

}

parse_card

{

number=$1

let "suit_number = number / CARDS_IN_SUIT"

suit=${Suits[suit_number]}

echo -n "$suit-"

let "card_no = number % CARDS_IN_SUIT"

Card=${Cards[card_no]}

printf %-4s $Card

#

Вывод по столбцам.

}

seed_random # Переустановка генератора случайных чисел.

{

seed=`eval date +%s`

let "seed %= 32766"

RANDOM=$seed

}

deal_cards

{

echo

cards_picked=0

while [ "$cards_picked" -le $UPPER_LIMIT ]

do

pick_a_card

t=$?

if [ "$t" -ne $DUPE_CARD ]

then

parse_card $t

u=$cards_picked+1

# Возврат к индексации с 1 (временно).

let "u %= $CARDS_IN_SUIT"

if [ "$u" -eq 0 ] # вложенный if/then.

then

echo

echo

fi

# Смена руки.

let "cards_picked += 1"

fi

done

echo

return 0

}

# Структурное программирование:

# вся логика приложения построена на вызове функций.

#================

seed_random

initialize_Deck

initialize_Suits

initialize_Cards

deal_cards

exit 0

#================

# Упражнение 1:

# Добавьте комментарии, чтобы до конца задокументировать этот сценарий.

# Упражнение 2:

# Исправьте сценарий так, чтобы карты в каждой руке выводились отсортированными по масти.

# Вы можете добавить и другие улучшения.

# Упражнение 3:

# Упростите логику сценария.

Глава 35. Замечания и дополнения

35.1. От автора

Как я пришел к мысли о написании этой книги? Это необычная история. Случилось это лет несколько тому назад. Мне потребовалось изучить язык командной оболочки -- а что может быть лучше, как не чтение хорошей книги!? Я надеялся купить учебник и справочник, которые охватывали бы в полной мере данную тематику. Я искал книгу, которая возьмет трудные понятия, вывернет их наизнанку и подробно разжует на хорошо откомментированных примерах. В общем, я искал очень хорошую книгу. К сожалению, в природе таковой не существовало, поэтому я счел необходимым написать ее.

Это напоминает мне сказку о сумасшедшем профессоре. Помешанный, до безумия, при виде книги, любой книги -- в библиотеке, в книжном магазине -- не важно где, им овладевала

уверенность в том, что и он мог бы написать эту книгу, причем сделать это гораздо лучше. Он стремительно мчался домой и садился за создание своей собственной книги с тем же названием. Когда он умер, в его доме нашли несколько тысяч, написанных им книг, этого количества хватило бы, чтобы посрамить самого Айзека Азимова. Книги, может быть и не были так хороши -- кто знает, но разве это имеет какое-то значение? Вот -- человек, жил своими грезами, пусть одержимый и движимый ими, но я не могу удержаться от восхищения старым чудаком...

35.2. Об авторе

Автор не стремится ни к званиям, ни к наградам, им движет неодолимое желание писать [ 65 ] . Эта книга -- своего рода отдых от основной работы, HOW-2 Meet Women: The Shy Man's Guide to Relationships (Руководство Застенчивого Мужчины о том Как Познакомиться С Женщиной) . Он также написал Software-Building HOWTO.

Пользуется Linux с 1995 года (Slackware 2.2, kernel 1.2.1). Выпустил несколько программ, среди которых cruft -- утилита шифрования, заменявшая стандартную UNIX-овую crypt, mcalc -- финансовый калькулятор, для выполнения расчетов по займам, judge и yawl -- пакет игр со словами. Программировать начинал с языка FORTRAN IV на CDC 3800, но не испытывает ностальгии по тем дням.

65

Кто может -- тот делает. Кто не может... тот получает сертификат MCSE.

Живет в глухой, заброшенной деревушке со своей женой и собакой.

35.3. Инструменты, использовавшиеся при создании книги

35.3.1. Аппаратура

IBM Thinkpad, model 760XL laptop (P166, 104 Mb RAM) под управлением Red Hat 7.1/7.3. Несомненно, это довольно медлительный агрегат, но он имеет отличную клавиатуру, и это много лучше, чем пара карандашей и письменный стол.

35.3.2. Программное обеспечение

Мощный текстовый редактор vim (автор: Bram Moolenaar) .

OpenJade -- инструмент, выполняющий, на основе DSSSL, верификацию и преобразование SGML-документов в другие форматы.

Таблицы стилей DSSSL от Norman Walsh.

DocBook, The Definitive Guide (Norman Walsh, Leonard Muellner O'Reilly, ISBN 1-56592-580-7). Полное руководство по созданию документов в формате Docbook SGML.

35.4. Благодарности

Без участия сообщества этот проект был бы невозможен. Автор признает, что без посторонней помощи, написание этой книги стало бы невыполнимой задачей и благодарит всех, кто оказал посильную помощь.

Philippe Martin -- перевел этот документ в формат DocBook/SGML. Работает в маленькой французской компании, в качестве разработчика программного обеспечения. В свободное от работы время -- любит работать над документацией или программным обеспечением для GNU/Linux, читать книги, слушать музыку и веселиться с друзьями. Вы можете столкнуться с ним, где-нибудь во Франции, в провинции Басков, или написать ему письмо на feloy@free.fr.

Поделиться с друзьями: