Затем выполняется проверка значения переменной. Если переменной присвоено какое‑либо значение, то это свидетельствует о наличии ошибки; в случае отсутствия присвоенного значения ошибки нет. На основании результатов этой проверки формируется код возврата. Использование кода возврата позволяет сценарию фиксировать момент завершения проверки, выполняемой функцией в вызывающей части сценария.
Для проверки вывода функции можно использовать формат, применяемый для оператора 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" != "" ]
then
# присутствуют ошибки
return 1
else
# содержит только символы
return 0
fi }
name_error()
# отображение сообщения об ошибке
{
echo " $@ contains errors, it must contain only letters"
}
while : do
echo -n "What ls your first name :"
read F_NAME
if char_name $F_NAME
then
# все OK, завершение выполнения break else
name_error $F_NAME fi done
while : do
echo -n "What ls your surname :"
read S_NAME
if char_narae $S_NAME
then
# все OK, завершение выполнения
break else
name_error $S_NAME
fi
done
Обратите внимание на то, что для обработки результатов ввода применяется цикл while. Благодаря этому на экране отображается запрос до тех пор, пока пользователь не укажет верное значение. После ввода нужного значения выполнение цикла прерывается. Конечно, при реализации работающего сценария пользователю предоставляется возможность прервать выполнение цикла. При этом также применяется соответствующее управление курсором, например при проверке наличия полей с нулевой длиной.
Ниже приведены результаты выполнения описанного сценария:
$ func2
What ls your first name: Davi2d
Davi2d contains errors, it must contain only letters
What ls your first name: David
What ls your surname: Tansley1
Tansley1 contains errors, it must contain only letters
What ls your surname: Tansley
Проблемы с конструкцией echo
В системах Linux, BSD или System V конструкция echo по–разному интерпретирует служебные символы. Создадим функцию, определяющую систему, в которой используется конструкция echo.
После того как была применена конструкция echo, командная строка может и далее отображаться на экране, ожидая ввода данных со стороны команды read.
Для реализации описанного поведения в системах Linux и BSD совместно с командой echo применяется опция -n. Ниже приводится пример конструкции echo LINUX (BSD), когда командная строка продолжает отображаться на экране до момента завершения сценария:
$ echo -n "Your паше :"
Your name : {{?}}
В System V в этом случае применяется параметр \с:
$ echo "Your name :\c"
Your name : []
Для отображения на экране управляющих символов в Linux также потребуется указывать опцию -e в начале оператора echo. В других системах достаточно просто воспользоваться обратной косой чертой, в результате чего интерпретатор shell будет "уведомлен" о наличии управляющего символа.
Существует два метода проверки типа используемой конструкции echo. Мы рассмотрим оба этих метода, и вы сможете выбрать один из них для дальнейшего применения.
При использовании первого метода проверка управляющего символа происходит внутри конструкции echo. Если после ввода команды echo \007 прозвучал звуковой сигнал, значит, перед нами System V. Если отображается строка "\007", значит, текущей операционной системой является Linux.
Вот первая функция, выполняющая проверку на наличие управляющих символов.
uni_prompt ()
• uni_prompt
• универсальная конструкция echo