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




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


declare -a DIR_DIG DigestFile CUR_DIR DIR_DIG echo "The new \"name\" (checksum) for ${CUR_DIR[9]} is ${DIR_DIG[0]}"

declare -a DIR_ENT # BIG_DIR # For really big arrays - use a temporary file in ramdisk # BIG-DIR # ListDirectory -of "${CUR_DIR[11]}/*" "/tmpfs/junk2" ListDirectory "${CUR_DIR[11]}/*" DIR_ENT

declare -a DIR_IDX # BIG-DIR # IndexList -if "/tmpfs/junk2" DIR_IDX IndexList DIR_ENT DIR_IDX

declare -a IDX_DIG # BIG-DIR # DIR_ENT=( $(cat /tmpfs/junk2) ) # BIG-DIR # DigestFile -if /tmpfs/junk2 IDX_DIG DigestFile DIR_ENT IDX_DIG # Small (should) be able to parallize IndexList & DigestFile # Large (should) be able to parallize IndexList & DigestFile & the assignment echo "The \"name\" (checksum) for the contents of ${PWD} is ${IDX_DIG[0]}"

declare -a FILE_LOC LocateFile ${PWD} FILE_LOC ListArray FILE_LOC

exit 0

Stephane Chazelas демонстрирует возможность объектно ориентированного подхода к программированию в Bash-сценариях.

Пример A-22. Объектно ориентированная база данных

#!/bin/bash # obj-oriented.sh: Объектно ориентрованный подход к программированию в сценариях. # Автор: Stephane Chazelas.

person.new() # Очень похоже на объявление класса в C++. { local obj_name=$1 name=$2 firstname=$3 birthdate=$4

eval "$obj_name.set_name() { eval \"$obj_name.get_name() { echo \$1 }\" }"

eval "$obj_name.set_firstname() { eval \"$obj_name.get_firstname() { echo \$1 }\" }"

eval "$obj_name.set_birthdate() { eval \"$obj_name.get_birthdate() { echo \$1 }\" eval \"$obj_name.show_birthdate() { echo \$(date -d \"1/1/1970 0:0:\$1 GMT\") }\" eval \"$obj_name.get_age() { echo \$(( (\$(date +%s) - \$1) / 3600 / 24 / 365 )) }\" }"

$obj_name.set_name $name $obj_name.set_firstname $firstname $obj_name.set_birthdate $birthdate }

echo

person.new self Bozeman Bozo 101272413 # Создается экземпляр класса "person.new" (фактически -- вызов функции с аргументами).




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