Краткое введение в программирование на Bash | страница 13
>#!/bin/bash
># функция hello() печатает сообщение
>hello(){
>echo "Вы находитесь в функции hello()"
>}
>echo "Вызываем функцию hello()…"
>hello
Попробуйте запустить код из примера выше. Функция hello() в нем имеет только одно предназначение — просто напечатать сообщение. Но, конечно же, они могут решать и более сложные задачи. Выше мы вызвали функцию hello(), используя строку:
>hello
Когда запускается эта строка, bash ищет скрипт для строки hello(). Он находит его в начале файла и выполняет его содержимое. Функции всегда вызываются по своему имени, что мы и видели выше. При написании функции вы можете обьявить ее, просто указав имя_функции (), как это сделано выше, или если вы хотите сделать ее объявление более явным, можете объявить ее так: function имя_функции(). Ниже представлен альтернативный способ написания функции hello()
>function hello() {
>echo "Вы находитесь в функции hello()"
>}
После имени функции должны следовать пустые открывающая и закрывающая скобки: "()", за ними следует пара фигурных скобок: «{…}», содержащих тело функции. Другими словами, весь код функции заключен в эти фигурные скобки. Функции всегда должны быть предварительно объявлены до своего вызова. Давайте попробуем в приведенном выше примере вызвать функцию до ее объявления:
>#!/bin/bash
>echo "Вызов функции hello() …"
>hello
>echo "Вы вне функции hello()"
># функция hello() просто выводит сообщение
>hello(){
>echo "Вы находитесь в функции hello()"
>}
Вот что мы получим, когда попытаемся запустить этот скрипт:
>$ ./hello.sh
>Вызов функции hello() ...
>./hello.sh: hello: command not found
>Вы вне функции hello()
Как видите, мы получили сообщение об ошибке. Поэтому стоит всегда размещать ваши функции в начале кода или, по крайней мере, непосредственно перед вызовом функции.
Еще один пример использования функции:
>#!/bin/bash
># admin.sh – инструмент для администратора
># функция new_user () создает новую учетную запись пользователя
>new_user(){
>echo "Подготовка к созданию новых пользователей ..."
>sleep 2
># запускаем программу adduser adduser
>}
>echo "1. Добавить пользователя"
>echo "2. Выход"
>echo "Укажите, что вы хотите сделать:"
>read choice
>case $choice in
>1) new_user # вызов функции new_user()
>;;
>*) exit
>;;
>esac
Для того чтобы приведенный скрипт работал правильно, вам необходимо запустить его из-под пользователя root, т. к. иначе программа adduser не сможет создать новых пользователей. Надеюсь, этот пример (хоть он и краток) показывает положительный эффект от использования функций.