Книга: Linux-сервер своими руками

19.7.8. Функции

19.7.8. Функции

Описание функции выглядит так:

имя() { список; }

Пример:

cdir()
{
 # изменяем каталог
 cd /
}

При выполнении функция не создает нового процесса, а выполняется в среде процесса, содержащего эту функцию. Аргументы функции можно передать ей как обыкновенные параметры при вызове сценария. Функции можно описывать в любом месте сценария, но вызов функции должен осуществляться только после ее описания. Возвращаясь к примеру, модифицируйте функцию:

#!/bin/bash
# файл fn
echo $$
cdir()
{
 # изменяем каталог
 echo "Х=$Х"
 Х=2
 echo "Params $0 $# $1 $2"
 echo "PID = $$"
 return 0
 cd $1
}
X=1
echo "X=$X"
cdir /etc
# вызов функции "cd" с параметрами
echo $?
echo "X=$X"

На экране вы увидите примерно следующую информацию:

788
Х=1
Х=1
Params fn l /etc
788
0
Х=2

Проанализируем полученную информацию. Как уже отмечалось, функция не порождает нового процесса, поэтому PID остался равным 788 как до вызова функции, так и во время ее выполнения. Переменная X доступна нашей функции, потому что описана до вызова функции. Функция «видит» значение переменной X, установленное в основном блоке сценария. Затем функция изменяет значение переменной X и передает его в основной блок (Х=2). Функции был передан только один параметр — /etc, вместо второго параметра была отображена пустая строка. Имя файла осталось прежним — fn. Обратите внимание на важный момент: функция сообщила нам много полезной информации об устройстве функций в bash, но не оправдала своего названия — cdir (change dir). Реально изменения каталога не произошло, потому что перед выполнением команды cd была выполнена команда return с кодом завершения 0, которая прервала выполнение функции.

Оглавление книги


Генерация: 0.064. Запросов К БД/Cache: 0 / 2
поделиться
Вверх Вниз