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



Программирование на языке сценариев командной оболочки - стр. 294


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. От автора

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


Содержание  Назад  Вперед