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

на главную - закладки

Жанры

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

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

Шрифт:

then

let "count += 1"

fi

fi

done

if [ ${array[$cell_number]} = "$ALIVE1" ]

then

let "count -= 1" # Убедиться, что сама проверяемая ячейка

fi #+ не была подсчитана.

return $count

}

next_gen # Обновить массив, в котором содержится информация о новом "поколении".

{

local array

local i=0

array=( `echo "$1"` ) #

Преобразовать в массив.

while [ "$i" -lt "$cells" ]

do

IsAlive "$1" $i ${array[$i]} # "Живая"?

if [ $?
– eq "$ALIVE" ]

then # Если "живая", то

array[$i]=. #+ записать точку.

else

array[$i]="_" # Иначе -- символ подчеркивания

fi #+ (который позднее заменится на пробел).

let "i += 1"

done

# let "generation += 1" # Увеличить счетчик поколений.

# Подготовка переменных, для передачи в функцию "display".

avar=`echo ${array[@]}` # Преобразовать массив в строку.

display "$avar" # Вывести его.

echo; echo

echo "Поколение $generation -- живых особей $alive"

if [ "$alive" -eq 0 ]

then

echo

echo "Преждеверменное завершение: не осталось ни одной живой особи!"

exit $NONE_ALIVE # Нет смысла продолжать

fi #+ если не осталось ни одной живой особи

}

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

# main

# Загрузить начальное поколение из файла.

initial=( `cat "$startfile" | sed -e '/#/d' | tr -d '\n' |\

sed -e 's/\./\. /g' -e 's/_/_ /g'` )

# Удалить строки, начинающиеся с символа '#' -- комментарии.

# Удалить строки перевода строки и вставить пробелы между элементами.

clear # Очистка экрана.

echo # Заголовок

echo "======================="

echo " $GENERATIONS поколений"

echo " в"

echo " игре \" ЖИЗНЬ\""

echo "======================="

# -------- Вывести первое поколение.
– -------

Gen0=`echo ${initial[@]}`

display "$Gen0" # Тлько вывод.

echo; echo

echo "Поколение $generation -- живых особей $alive"

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

let "generation += 1" # Нарастить счетчик поколений.

echo

# ------- Вывести второе поколение.
– ------

Cur=`echo ${initial[@]}`

next_gen "$Cur" #

Обновить и вывести.

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

let "generation += 1" # Нарастить счетчик поколений.

# ------ Основной цикл игры ------

while [ "$generation" -le "$GENERATIONS" ]

do

Cur="$avar"

next_gen "$Cur"

let "generation += 1"

done

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

echo

exit 0

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

# Этот сценарий имеет недоработку.

# Граничные ячейки сверху, снизу и сбоков остаются пустыми.

# Упражнение: Доработайте сценарий таким образом, чтобы ,

# + левая и правая стороны как бы "соприкасались",

# + так же и верхняя и нижняя стороны.

Пример A-12. Файл с первым поколением для игры "Жизнь"

# Это файл-пример, содержащий "поколение 0", для сценария "life.sh".

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

# Игровое поле имеет размер 10 x 10, точкой обозначается "живая" особь,

#+ символом подчеркивания -- пустая ячейка. Мы не можем использовать пробелы,

#+ для обозначения пустых ячеек, из-за особенностей строения массивов в Bash.

# [Упражнение для читателей: объясните, почему?.]

#

# Строки, начинающиеся с символа '#' считаются комментариями, сценарий их игнорирует.

__.__..___

___._.____

____.___..

_._______.

____._____

..__...___

____._____

___...____

__.._..___

_..___..__

+++

Следующие два сценария предоставил Mark Moraes, из университета в Торонто. См. файл "Moraes-COPYRIGHT", который содержит указание на авторские права.

Пример A-13. behead: Удаление заголовков из электронных писем и новостей

#! /bin/sh

# Удаление заголовков из электронных писем и новостей т.е. до первой

# пустой строки

# Mark Moraes, Университет в Торонто

# ==> Такие комментарии добавлены автором документа.

if [ $# -eq 0 ]; then

# ==> Если входной аргумент не задан (файл), то выводить результат на stdin.

sed -e '1,/^$/d' -e '/^[ ]*$/d'

# --> Удалить пустые строки и все строки предшествующие им

else

# ==> Если аргумент командной строки задан, то использовать его как имя файла.

Поделиться:
Популярные книги

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9