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




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


startfile=gen0 # Начальное поколение из файла по-умолчанию -- "gen0". # если не задан другой файл, из командной строки. # if [ -n "$1" ] # Проверить аргумент командной строки -- файл с "поколениемn 0". then if [ -e "$1" ] # Проверка наличия файла. then startfile="$1" fi fi

ALIVE1=. DEAD1=_ # Представление "живых" особей и пустых ячеек в файле с "поколением 0".

# Этот сценарий работает с игровым полем 10 x 10 grid (может быть увеличено, #+ но большое игровое поле будет обрабатываться очень медленно). ROWS=10 COLS=10

GENERATIONS=10 # Максимальное число поколений.

NONE_ALIVE=80 # Код завершения на случай, #+ если не осталось ни одной "живой" особи. TRUE=0 FALSE=1 ALIVE=0 DEAD=1

avar= # Текущее поколение. generation=0 # Инициализация счетчика поколений.

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

let "cells = $ROWS * $COLS" # Количество ячеек на игровом поле.

declare -a initial # Массивы ячеек. declare -a current

display () {

alive=0 # Количество "живых" особей. # Изначально -- ноль.

declare -a arr arr=( `echo "$1"` ) # Преобразовать аргумент в массив.

element_count=${#arr[*]}

local i local rowcheck

for ((i=0; i<$element_count; i++)) do

# Символ перевода строки -- в конец каждой строки. let "rowcheck = $i % ROWS" if [ "$rowcheck" -eq 0 ] then echo # Перевод строки. echo -n " " # Выравнивание. fi

cell=${arr[i]}

if [ "$cell" = . ] then let "alive += 1" fi

echo -n "$cell" | sed -e 's/_/ /g' # Вывести массив, по пути заменяя символы подчеркивания на пробелы. done

return

}

IsValid () # Проверка корректности координат ячейки. {

if [ -z "$1" -o -z "$2" ] # Проверка наличия входных аргументов. then return $FALSE fi

local row local lower_limit=0 # Запрет на отрицательные координаты. local upper_limit local left local right

let "upper_limit = $ROWS * $COLS - 1" # Номер последней ячейки на игровом поле.




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