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


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


Primes=( '' $(seq $UPPER_LIMIT) )

i=1 until (( ( i += 1 ) > SPLIT )) # Числа из верхней половины диапазона могут не рассматриваться. do if [[ -n $Primes[i] ]] then t=$i until (( ( t += i ) > UPPER_LIMIT )) do Primes[t]= done fi done echo ${Primes[*]}

exit 0

Сравните этот сценарий с генератором простых чисел, не использующим массивов, Пример A-18.

--

Массивы позволяют эмулировать некоторые структуры данных, поддержка которых в Bash не предусмотрена.

Пример 25-9. Эмуляция структуры "СТЕК" ("первый вошел -- последний вышел")

#!/bin/bash # stack.sh: Эмуляция структуры "СТЕК" ("первый вошел -- последний вышел")

# Подобно стеку процессора, этот "стек" сохраняет и возвращает данные по принципу #+ "первый вошел -- последний вышел".

BP=100 # Базовый указатель на массив-стек. # Дно стека -- 100-й элемент.

SP=$BP # Указатель вершины стека. # Изначально -- стек пуст.

Data= # Содержимое вершины стека. # Следует использовать дополнительную переменную, #+ из-за ограничений на диапазон возвращаемых функциями значений.

declare -a stack

push() # Поместить элемент на вершину стека. { if [ -z "$1" ] # А вообще, есть что помещать на стек? then return fi

let "SP -= 1" # Переместить указатель стека. stack[$SP]=$1

return }

pop() # Снять элемент с вершины стека. { Data= # Очистить переменную.

if [ "$SP" -eq "$BP" ] # Стек пуст? then return fi # Это предохраняет от выхода SP за границу стека -- 100,

Data=${stack[$SP]} let "SP += 1" # Переместить указатель стека. return }

status_report() # Вывод вспомогательной информации. { echo "-------------------------------------" echo "ОТЧЕТ" echo "Указатель стека SP = $SP" echo "Со стека был снят элемент \""$Data"\"" echo "-------------------------------------" echo }

# ======================================================= # А теперь позабавимся.




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