Выбрать главу

# Значения позиционных параметров берутся из "$variable".

first_param=$1

second_param=$2

shift; shift # сдвиг двух первых параметров.

remaining_params="$*"

echo

echo "первый параметр = $first_param" # one

echo "второй параметр = $second_param" # two

echo "остальные параметры = $remaining_params" # three four five

echo; echo

# Снова.

set -- $variable

first_param=$1

second_param=$2

echo "первый параметр = $first_param" # one

echo "второй параметр = $second_param" # two

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

set --

# Позиционные параметры сбрасываются, если не задано имя переменной.

first_param=$1

second_param=$2

echo "первый параметр = $first_param" # (пустое значение)

echo "второй параметр = $second_param" # (пустое значение)

exit 0

См. так же Пример 10-2 и Пример 12-40.

unset

Команда unset удаляет переменную, фактически -- устанавливает ее значение в null. Обратите внимание: эта команда не может сбрасывать позиционные параметры (аргументы).

bash$ unset PATH

bash$ echo $PATH

bash$

Пример 11-15. "Сброс" переменной

#!/bin/bash

# unset.sh: Сброс переменной.

variable=hello # Инициализация.

echo "variable = $variable"

unset variable # Сброс.

# Тот же эффект дает variable=

echo "(unset) variable = $variable" # $variable = null.

exit 0

export

Команда export экспортирует переменную, делая ее доступной дочерним процессам. К сожалению, невозможно экспортировать переменную родительскому процессу. В качестве примера использования команды export можно привести сценарии инициализации системы, вызываемые в процессе загрузки, которые инициализируют и экспортируют переменные окружения, делая их доступными для пользовательских процессов.

Пример 11-16. Передача переменных во вложенный сценарий awk, с помощью export

#!/bin/bash

# Еще одна версия сценария "column totaler" (col-totaler.sh)

# который суммирует заданную колонку (чисел) в заданном файле.

# Здесь используются переменные окружения, которые передаются сценарию 'awk'.

ARGS=2

E_WRONGARGS=65

if [ $# -ne "$ARGS" ] # Проверка количества входных аргументов.

then

echo "Порядок использования: `basename $0` filename column-number"

exit $E_WRONGARGS

fi

filename=$1

column_number=$2

#===== До этой строки идентично первоначальному варианту сценария =====#

export column_number

# Экспорт номера столбца.

# Начало awk-сценария.

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

awk '{ total += $ENVIRON["column_number"]

}

END { print total }' $filename

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

# Конец awk-сценария.

# Спасибо Stephane Chazelas.

exit 0

Допускается объединение инициализации и экспорта переменной в одну инструкцию: export var1=xxx.

Однако, как заметил Greg Keraunen, в некоторых ситуациях такая комбинация может давать иной результат, нежели раздельная инициализация и экспорт.

bash$ export var=(a b); echo ${var[0]}

(a b)

bash$ var=(a b); export var; echo ${var[0]}

a

declare, typeset

Команды declare и typeset задают и/или накладывают ограничения на переменные.

readonly

То же самое, что и declare -r, делает переменную доступной только для чтения, т.е. переменная становится подобна константе. При попытке изменить значение такой переменной выводится сообщение об ошибке. Эта команда может расцениваться как квалификатор типа const в языке C.

getopts

Мощный инструмент, используемый для разбора аргументов, передаваемых сценарию из командной строки. Это встроенная команда Bash, но имеется и ее "внешний" аналог /usr/bin/getopt, а так же программистам, пишущим на C, хорошо знакома похожая библиотечная функция getopt. Она позволяет обрабатывать серии опций, объединенных в один аргумент[ 25 ] и дополнительные аргументы, передаваемые сценарию (например, scriptname -abc -e /usr/local).

вернуться

25

Опция -- это аргумент, который управляет поведением сценария и может быть либо включен, либо выключен. Аргумент, который объединяет в себе несколько опций (ключей), определяет поведение сценария в соответствии с отдельными опциями, объединенными в данном аргументе..