Искусство программирования на языке сценариев командной оболочки
Шрифт:
match_string $a $b # не равны
echo $? # 90
match_string $b $d # равны
echo $? # 0
exit 0
Пример 10-28. Проверка ввода
#!/bin/bash
# isalpha.sh: Использование "case" для анализа строк.
SUCCESS=0
FAILURE=-1
isalpha #
{
if [ -z "$1" ] # Вызов функции без входного аргумента?
then
return $FAILURE
fi
case "$1" in
[a-zA-Z]*) return $SUCCESS;; # Первый символ - буква?
* ) return $FAILURE;;
esac
} # Сравните с функцией "isalpha " в языке C.
isalpha2 # Проверка - состоит ли вся строка только из символов алфавита.
{
[ $# -eq 1 ] || return $FAILURE
case $1 in
*[!a-zA-Z]*|"") return $FAILURE;;
*) return $SUCCESS;;
esac
}
isdigit # Проверка - состоит ли вся строка только из цифр.
{ # Другими словами - является ли строка целым числом.
[ $# -eq 1 ] || return $FAILURE
case $1 in
*[!0-9]*|"") return $FAILURE;;
*) return $SUCCESS;;
esac
}
check_var # Интерфейс к isalpha
{
if isalpha "$@"
then
echo "\"$*\" начинается с алфавитного символа."
if isalpha2 "$@"
then # Дальнейшая проверка не имеет смысла, если первй символ не буква.
echo "\"$*\" содержит только алфавитные символы."
else
echo "\"$*\" содержит по меньшей мере один не алфавитный символ."
fi
else
echo "\"$*\" начинсется с не алфавитного символа ."
# Если функция вызвана без входного параметра,
#+ то считается, что строка содержит "не алфавитной" символ.
fi
echo
}
digit_check # Интерфейс к isdigit .
{
if isdigit "$@"
then
echo "\"$*\" содержит только цифры [0 - 9]."
else
echo "\"$*\" содержит по меньшей мере один не цифровой символ."
fi
echo
}
a=23skidoo
b=H3llo
c=-What?
d=What?
e=`echo $b` # Подстановка команды.
f=AbcDef
g=27234
h=27a34
i=27.34
check_var $a
check_var $b
check_var $c
check_var $d
check_var $e
check_var $f
check_var # Вызов без параметра, что произойдет?
#
digit_check $g
digit_check $h
digit_check $i
exit 0 # Сценарий дополнен S.C.
# Упражнение:
# --------
# Напишите функцию 'isfloat ', которая проверяла бы вещественные числа.
# Подсказка: Эта функция подобна функции 'isdigit ',
#+ надо лишь добавить анализ наличия десятичной точки.
select
Оператор select был заимствован из Korn Shell, и является еще одним инструментом, используемым при создании меню.
select variable [in list] do command... break done
Этот оператор предлагает пользователю выбрать один из представленных вариантов. Примечательно, что select по-умолчанию использует в качестве приглашения к вводу (prompt) -- PS3 (#? ), который легко изменить.
Пример 10-29. Создание меню с помощью select
#!/bin/bash
PS3='Выберите ваш любимый овощ: ' # строка приглашения к вводу (prompt)