$ pg functions.main

#!/bin/sh findit ()

{

# findit

#if [ $# -lt 1 3; then

echo "usage: findit file"

return 1 fi

for loop do

find / -name $LOOP -print done }

Снова загрузим исходный файл:

$ . ./functions.main

Используйте команду set, чтобы убедиться, что файл действительно загружен. Если интерпретатор shell корректно интерпретирует цикл for и воспринимает все требуемые параметры, на экране отобразится соответствующее сообщение.

$ set

findit=()

{

if [ $# -lt 1 ]; then

echo "usage :`basename $0` file";

return 1; fi;

for loop in "$@"; do

find / -name $LOOP -print; done }

Далее вызывается измененная функция findit. При этом поддерживаются два файла с целью осуществления поиска:

$ findit LPSO.doc passwd

/usr/local/accounts/LPSO.doc

/etc/passwd

<p><emphasis><strong>19.10.3. Примеры функций</strong></emphasis></p>

Теперь, когда вы получили начальные сведения о функциях, рассмотрим их практическое применение.

Сразу же стоит заметить, что использование функций позволяет сэкономить массу времени и усилий программистов. Это возможно благодаря тому, что функция является повторно применяемой.

Подтверждение ввода

Рассмотрим небольшой сценарий, который запрашивает имя и фамилию пользователя:

$ pg func2

#!/bin/sh

# func2

echo -n "What ls your first name :"

read F_NAME

echo -n "What ls your surname:"

read S_NAME

Данный сценарий предназначен для выполнения проверки значений переменных (переменным присваиваются исключительно одни символы). Выполнение этой задачи без применения функций может привести к дублированию программного кода. Функции позволяют обойтись без дублирования. Для проверки наличия одних лишь символов можно воспользоваться утилитой awk. Ниже приводится функция, которая осуществляет проверку ввода либо только прописных, либо строчных символов.

char_name()

{

#char_name

#вызов: char_name string

#назначение аргумента новой переменной

_LETTERS_ONLY=$1

#использование awk для проверки на наличие символов!

_LETTERS_ONLY=`echo $1 | awk '{if [$0~/[^a‑zA‑Z]/} print "1"}'`

if [ "$_LETTERS_ONLY" != "" ] then

# ошибки

return 1

else

# содержит только символы

return 0

fi }

Сначала переменной $1 будет присвоено более осмысленное имя. Затем применяется утилита awk, осуществляющая проверку, состоит ли переданная строка из одних литер. В результате выполнения возвращается код, включающий 1 (для символов, не являющихся литерами) и 0 — для символов–литер. Этот код присваивается переменной _LETTERS_ONLY.

Затем выполняется проверка значения переменной. Если переменной присвоено какое‑либо значение, то это свидетельствует о наличии ошибки; в случае отсутствия присвоенного значения ошибки нет. На основании результатов этой проверки формируется код возврата. Использование кода возврата позволяет сценарию фиксировать момент завершения проверки, выполняемой функцией в вызывающей части сценария.

Для проверки вывода функции можно использовать формат, применяемый для оператора if:

if char_name $F_NAME; then

echo "OK"

else

echo "ERRORS"

fi

Если происходит ошибка, можно создать другую функцию, отображающую сообщение об ошибке:

name_error ()

# name_error

# отображение сообщения об ошибке

{

echo " $@ contains errors, it must contain only letters"

}

Функция name_error будет отображать сообщения об ошибках, игнорируя при этом все некорректные записи. Применение специальной переменной $@ позволяет отображать на экране значения всех аргументов. В рассматриваемом случае будет отображено либо значение f_name, либо значение $NAME. А теперь приведем завершенный сценарий, созданный с применением функций:

$ pg func2

#!/bin/sh

char_r.ame {)

# наименование_символа

# вызов: char_name строка

# проверка на предмет того, действительно ли $1 содержит только символы a‑z.,A‑Z

{

# присвоение аргумента новой переменной

_LETTERS_ONLY=$1

_:LETTERS_ONLY=`echo $1|awk '{ if ($0~/[^a‑zA‑Z]/) print "1"}`

if [ "$_LETTERS_ONLY" != "" ]

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

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