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


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


if [ "$1" -lt "$lower_limit" -o "$1" -gt "$upper_limit" ] then return $FALSE # Выход за границы массива. fi

row=$2 let "left = $row * $ROWS" # Левая граница. let "right = $left + $COLS - 1" # Правая граница.

if [ "$1" -lt "$left" -o "$1" -gt "$right" ] then return $FALSE # Выхол за нижнюю строку. fi

return $TRUE # Координаты корректны.

}

IsAlive () # Проверка наличия "живой" особи в ячейке. # Принимает массив и номер ячейки в качестве входных аргументов. { GetCount "$1" $2 # Подсчитать кол-во "живых" соседей. local nhbd=$?

if [ "$nhbd" -eq "$BIRTH" ] # "Живая". then return $ALIVE fi

if [ "$3" = "." -a "$nhbd" -eq "$SURVIVE" ] then # "Живая" если перед этим была "живая". return $ALIVE fi

return $DEAD # По-умолчанию.

}

GetCount () # Подсчет "живых" соседей. # Необходимо 2 аргумента: # $1) переменная-массив # $2) cell номер ячейки { local cell_number=$2 local array local top local center local bottom local r local row local i local t_top local t_cen local t_bot local count=0 local ROW_NHBD=3

array=( `echo "$1"` )

let "top = $cell_number - $COLS - 1" # Номера соседних ячеек. let "center = $cell_number - 1" let "bottom = $cell_number + $COLS - 1" let "r = $cell_number / $ROWS"

for ((i=0; i<$ROW_NHBD; i++)) # Просмотр слева-направо. do let "t_top = $top + $i" let "t_cen = $center + $i" let "t_bot = $bottom + $i"

let "row = $r" # Пройти по соседям в средней строке. IsValid $t_cen $row # Координаты корректны? if [ $? -eq "$TRUE" ] then if [ ${array[$t_cen]} = "$ALIVE1" ] # "Живая"? then # Да! let "count += 1" # Нарастить счетчик. fi fi

let "row = $r - 1" # По верхней строке. IsValid $t_top $row if [ $? -eq "$TRUE" ] then if [ ${array[$t_top]} = "$ALIVE1" ] then let "count += 1" fi fi




Начало  Назад  Вперед



Книжный магазин