Читаем Краткое введение в программирование на Bash полностью

После имени функции должны следовать пустые открывающая и закрывающая скобки: "()", за ними следует пара фигурных скобок: «{…}», содержащих тело функции. Другими словами, весь код функции заключен в эти фигурные скобки. Функции всегда должны быть предварительно объявлены до своего вызова. Давайте попробуем в приведенном выше примере вызвать функцию до ее объявления:

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

<p>Перехват сигналов</p>

Вы можете использовать встроенную в bash программу trap для перехвата сигналов в своих программах. Это хороший способ изящно завершать работу программы. Например, если пользователь, когда ваша программа работает, нажмет CTRL-C — программе будет отправлен сигнал interrupt(SIGINT), который завершит ее. Функция trap позволит вам перехватить этот сигнал, что даст возможность либо продолжить выполнение программы, либо сообщить пользователю, что программа завершает работу. Синтаксис этой команды такой:

trap action signal

Здесь: action — то, что вы хотите делать, когда сигнал получен; signal — сигнал, на который стоит реагировать.

Список сигналов можно посмотреть с помощью команды trap -l.

При указании сигналов в своих скриптах можно опустить первые три буквы названия сигнала, т. е. SIG. Например, сигнал прерывания это — SIGINT. В вашем скрипте, в качестве его имени, можно указать просто INT. Вы также можете использовать номер сигнала, указанный рядом с его именем. Например, числовое значение сигнала SIGINT — 2. Попробуйте написать и запустить приведенный ниже пример:

#!/bin/bash

# использование команды trap

# перехватываем нажатие CTRL-C и запускаем функцию sorry()

trap sorry INT

# функция sorry() печатает сообщение

sorry(){

echo "Извини меня, Дэйв. Я не могу этого сделать"

sleep 3

}

# обратный отсчет от 10 до 1:

echo "Подготовка к уничтожению системы"

for i in 10 9 8 7 6 5 4 3 2 1; do

echo "Осталось $i секунд до уничтожения..."

sleep 1

done

echo "Запуск программы уничтожения!"

Наберите и запустите приведенный пример. Когда программа будет работать и вести обратный отсчет, нажмите CTRL-C. Это действие отправит программе сигнал прерывания — SIGINT. Тем не менее сигнал будет перехвачен командой trap, которая, в свою очередь, выполнит функцию sorry(). Вы можете заставить trap игнорировать сигнал, указав символ кавычек вместо указания действия. Также вы можете отключить ловушку с помощью тире: "-". Например:

# запускать функцию sorry(), если получен сигнал SIGINT

trap sorry INT

# отключение ловушки

trap - INT

# ничего не делать при получении сигнала

SIGINT trap " INT

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных