Краткое введение в программирование на 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 не сможет создать новых пользователей. Надеюсь, этот пример (хоть он и краток) показывает положительный эффект от использования функций.