if [ `echo "Z\c"`="Z" ] >/dev/null 2>&1
then
# System V
echo "$@\c"
else
# LINUX/BSD
echo -e -n "$@"
fi }
Для вызова данной функции из сценария применяется команда:
uni_prompt "\007 There goes the bell, What ls your name :"
Вызов любой из описанных выше функций возможен с помощью следующего кода:
uni_prompt "\007 There goes the bell, What is your name :"
read NAME
В результате мы получим:
There goes the bell, What ls your name :
Чтение одиночного символа
При создании меню одной из самых неприятных задач является необходимость нажимать клавишу [Return] после выбора каждого пункта меню либо в ответ на сообщение "нажмите любую клавишу для продолжения". В этом случае приходит на помощь команда dd, избавляющая пользователя от необходимости нажимать клавишу [Return] для отсылки ключевой последовательности.
Команда dd обычно применяется для выполнения различных преобразований и устранения проблем, связанных с хранением данных на лентах, либо при выполнении обычных задач резервирования. Данная команда также может применяться для создания файлов фиксированного размера. В следующем примере с ее помощью создается файл myfile, размер которого составляет 1 мегабайт.
dd if=/dev/zero of=myfile count=512 bs=2048
Команда dd также может интерпретировать результаты ввода с клавиатуры и использоваться для чтения символов. В данном случае ожидается появление лишь одного символа. Команда dd должна завершать выполнение после нахождения символа новой строки; этот управляющий символ появляется после нажатия пользователем клавиши [Return]. Команда dd в данном случае также посылает один символ. Перед тем как произойдет одна из описанных ситуаций, необходимо установить терминал в исходный режим. Для этого применяется команда stty. Настройки в приведенном ниже коде сохраняются перед вызовом команды dd и затем восстанавливаются после завершения выполнения команды dd.
read_a_char()
#read_a_char {
#сохранение настроек SAVEDSTTY=`stty -g`
#задание параметра терминала stty cbreak
#чтение и вывод лишь одного символа
dd if=/dev/tty bs=l count=l 2> /dev/null
# восстановление параметра терминала и настроек
stty -cbreak
stty $SAVEDSTTY }
Для вызова функции и возврата введенного символа используется подстановка команд. Вот соответствующий пример.
echo -n "Hit Any Key To Continue"
character=`read_a_char`
echo " In case you are wondering you pressed $character"
Проверка наличия каталога
Проверка наличия каталогов является весьма распространенной задачей, возникающей при копировании файлов. Приведенная ниже функция проверяет имя файла, переданное функции, что позволяет установить наличие каталога. Поскольку в этом случае используется команда return с параметром, изменяющимся в зависимости от успеха или неудачи при выполнении команды, для проверки результатов наиболее удачным является выбор конструкции if.
is_it_a_directory()
{
# is_it_a_directorу
# вызов: is_it_a_directory имя_каталога
if [ $# -lt 1 ]; then
echo "is_it_a_directory: I need an argument" return 1 fi
# это каталог ?
_DIRECTORY_NAME=$1
if [ ! -d $_DIRECTORY_NAME ]; then
# нет
return 1
else
# да
return 0
fi
}
Для вызова функции и проверки результата можно воспользоваться кодом:
echo -n "enter destination directory :"
read DIREC
if is_it_a_directory $DIREC;
then :
else
echo "$DIREC does not exist, create it now? [y..n]"
# здесь должны находится команды для создания каталога или для выхода
fi
Запрос на ввод Y или N
Многие сценарии выдают запрос на ввод подтверждения перед выполнением дальнейшей обработки. Запрос может выглядеть следующим образом:
Create a directory
Do you wish to delete this file
Run the backup now
Confirm to save a record
Этот перечень может быть достаточно длинным.