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

child

echo "back to father"

echo "and the film ls :$FILM"

$ pg child

#!/bin/sh

# сценарий child

echo "called from father..! am the child"

echo "film name is :$FILM"

FILM="Die Hard"

echo "changing film to :$FILM"

Рассмотрим, что будет отображаться на экране в результате выполнения сценария.

$ father

this ls the father

I like the film :A Few Good Men

called from father… i am the child

film name is :

changing film to :Die Hard

back to father

and the film ls :A Few Good Men

Сценарий child не может возвратить переменную film, поскольку эта переменная не может быть экспортирована в сценарий father.

Теперь, если команду export добавить в сценарий father, сценарий child получит всю информацию о переменной film.

$ pg father

#!/bin/sh

# сценарий father.

echo "this ls the father"

FILM="A Few Good Men"

echo "I like the film :$FILM"

#вызов сценария child

#сначала экспортируйте переменную

export FILM

child

echo "back to father"

echo "and the film is :$FILM"

$ father2

this ls the father

I like the film :A Few Good Men

called from father… i am the child

film name ls :A Few Good Men

changing film to :Die Hard

back to father

and the film ls :A Few Good Men

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

Нельзя выполнять экспорт переменных из дочерних процессов в родительский процесс; однако с помощью изменения направления этого можно добиться.

14.4. Позиционные параметры командной строки

Как указывалось в начале главы, существуют переменные четырех типов. Имеются переменные интерпретатора команд, переменные среды, а также переменные двух других типов, которые являются специальными, поскольку они предназначены только для чтения. Существуют позиционные и специальные параметры. Рассмотрим позиционные параметры.

Если информация передается shell–сценарию, с помощью позиционных параметров можно получить доступ к ней. Каждый параметр передает сценарию заданное количество ссылок. Можно передавать произвольное число аргументов, но доступными являются только первые девять из них. Это ограничение преодолевается путем использования команды shift. Далее в книге будет показано, как работает команда shift. Нумерация параметров начинается с единицы и завершается девятью; каждый параметр, доступ к которому следует получить, предваряется знаком доллара $. Первый параметр, имеющий номер нуль, резервируется для представления действительного названия сценария; это значение может использоваться независимо от того, содержатся ли в сценарии параметры.

В приведенной таблице в качестве примера демонстрируется, как можно получить доступ к каждому параметру, если в сценарий передается строка "Did You See The Full Moon"

$0 $1 $2 $3 $4 $5 $6 $7 $8 $9
Наименование сценария Did You See The Full Moon

14.4.1. Применение в сценариях позиционных параметров

Воспользуемся приведенным выше примером в следующем сценарии.

$ pg param

#!/bin/sh # параметры

echo "This ls the script name : $0"

echo "This ls the first parameter : $1"

echo "This ls the second parameter : $2"

echo "This ls the third parameter : $3"

echo "This ls the fourth parameter : $4"

echo "This ls the fifth parameter : $5"

echo "This ls the sixth parameter : S6"

echo "This ls the seventh parameter : $7"

echo "This ls the eighth parameter : $8"

echo "This ls the ninth parameter : $9"

$ param Did You See The Full Moon

This ls the script name : ./param

This ls the first parameter : Did

This ls the second parameter : You

This ls the third parameter : See

This ls the fourth parameter : The

This ls the fifth parameter : Full

This ls the sixth parameter : Moon

This ls the seventh parameter :

This ls the eighth parameter :

This ls the ninth parameter :

Если передаются шесть параметров, седьмой, восьмой и девятый будут пустыми, чего и следовало ожидать. Обратите внимание, что первый параметр содержит название сценария. Этот параметр удобно использовать, если сценарий выдает сообщение об ошибках. Ниже приводится другой пример, где получается название: сценария.

$ pg param2 .

#!/bin/sh

echo "Hello world this ls $0 calling"

$ param2

Hello world this ls ./param2 calling

Заметьте, что параметр $0 также позволяет получить путь доступа к текущему каталогу. Для получения названия сценария предварите параметр $0 командой