Функции. Написание хорошо структурированных программ требует возможности соз- дания подпрограмм
Написание хорошо структурированных программ требует возможности соз- дания подпрограмм. В оболочке Bash это реализуется с помощью функций, представляющих собой именованные блоки кода (пример 10.42). При опре- делении функции в оболочке (даже просто в командной строке) ее можно вызвать по имени.
Пример 10.42. Синтаксис функции |
function имя()
{
команды
}
Код функции описывают в начале сценария до первого вызова функции. Для вызова функции достаточно просто указать ее имя.
Для демонстрации использования функций оболочки модифицируем про- грамму if.sh (см. примеры 10.27, 10.29, 10.31). Измененный код сценария if.sh представлен в примере 10.43, а результат его работы — в примере 10.44.
Пример 10.43. Использование функций |
#!/bin/bash function err_msg()
{
cat <<- ERR
Недостаточно аргументов. Использование: if.sh file
Аргумент file должен быть обычным файлом.
ERR
}
if [ $# -ne 1 ] then
err_msg exit 1
elif [ ! -f $1 ] then
fi
ls -l $1
echo -n 'Тип файла ' file $1
exit 1
Пример 10.44. Проверка работы функции в Bash |
$ ./if.sh
Недостаточно аргументов. Использование: if.sh file
Аргумент file должен быть обычным файлом.
$ ./if.sh /etc/passwd
-rw-r--r-- 1 root root 2033 Oct 19 23:24 /etc/passwd
Для передачи аргументов в функцию их указывают после имени функции, разделяя пробелами. В теле функции обращение к переданным аргументам производится с помощью позиционных параметров.
Модификация if.sh, с передачей аргументов в функцию, показана в приме- ре 10.45, а результат работы — в примере 10.46.
Пример 10.45. Передача значений в функции |
#!/bin/bash function err_msg()
{
echo "Ошибка: $1" cat <<- ERR
Недостаточно аргументов. Использование: if.sh file
Аргумент file должен быть обычным файлом.
ERR
}
if [ $# -ne 1 ] then
err_msg '001'
exit 1 elif [ ! -f $1 ] then
fi
ls -l $1
echo -n 'Тип файла ' file $1
exit 1
Здесь в функцию передается строка — код ошибки. В теле функции этот код считывается из позиционного параметра.
Пример 10.46. Проверка передачи аргументов в функции |
$ ./if.sh
Ошибка: 001
Недостаточно аргументов. Использование: if.sh file
Аргумент file должен быть обычным файлом.
Функции часто описывают в отдельных файлах, считывая в сценариях со- держимое этих файлов с помощью inline-подстановки.
Дата добавления: 2015-06-12; просмотров: 669;