Linux и UNIX: программирование в shell. Руководство разработчика
Linux и UNIX: программирование в shell. Руководство разработчика читать книгу онлайн
Данная книга является практическим руководством по программированию интерпретатора Bourne shell -cтандартного командного интерпретатора в UNIX, полностью совместимого с интерпретатором BASH shell в Linux. Книга предназначена для начинающих и опытных программистов и содержит множество полезных примеров, советов и подсказок. С ее помощью читатель сможет быстро научиться создавать shell–сценарии для реальных задач и ситуаций, возникающих в большинстве систем UNIX и Linux.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Вот сценарий, выполняющий описанные задачи
$ pg whilecontinue
#!/bin/sh
# whilecontinue
SAVFDIFS=$IFS
IFS=:
INPUT_FlLE=names2.txt
NAME_HOLD="Peter James"
LINE_NO=0
if [ -s $INPUT_FILE ]; then
while read NAME DEPT ID
do
LINE_NO=`expr $LINE_NO + 1`
if [ "$LINE_NO" — le 2 ]; then
# допуск, если номер строки меньше 2 continue
if [ "$NAME"="$NAME_HOLD" ], then
# пропуск, если переменной NAME_HOLD присвоено имя Peter James
continue
else
echo " Now processing $NAME $DEPT $ID"
# обработка файла
fi
done < $INPUT_FILE
IFS=$SAVEDIFS
else
echo "`basename $0` : sorry file not found or there is no data in the file" >&2
exit 1
При выполнении сценария получим следующие результаты.
$ whilecontinue
Luise Conrad Accounts ACC8987
Fred Terns Customer CJS012
James Lenod Accounts ACC887
Frank Pavely Payroll PR389
18.9. Меню
При создании меню представляется весьма удобным использование команды null совместно с циклом while. Объединение этих конструкций приводит к бесконечному циклу, что и требуется в меню Цикл должен выполняться до тех пор, пока пользователь не осуществит выход или не выберет нужную опцию
Для создания меню потребуется цикл while и оператор case, задающий шаблоны, с которыми сравниваются результаты ввода пользователя. При некорректном вводе обычно раздается звуковой сигнал и отображается сообщение об ошибке. Затем цикл продолжает выполняться до тех пор, пока пользователь не выберет опцию выхода из меню.
Меню должно быть дружественным по отношению к пользователю; все его элементы должны быть интуитивно понятными. Главный экран меню обычно отображает имя хоста и дату, а также имя пользователя, работающего с данным меню. В целях тестирования все опции меню будут использовать системные команды.
Ниже приводится примерный вид меню.
Сначала воспользуемся подстановкой команд для назначения даты, имени хоста и пользователя. Для указания даты используется формат dd/mm/yyyy. Этот формат задается с помощью следующего параметра:
$ date +%d/%B/%Y
32/05/1999
Для указания имени хоста может применяться опция -s, которая просто отображает часть имени хоста. Иногда имя хоста задается путем присвоения соответствующей переменной полностью определенного доменного имени. Существует возможность отображения на экране меню подобного длинного имени хоста.
Присвоим переменным осмысленные имена:
MYDATE=`date +%d/%m/%Y`
THIS_H0ST=`hostname -s`
USER=`whoami`
В цикле while команда null помещена непосредственно после слова "while". Вот формат бесконечного цикла:
while : do
команды..
done
При отображении экрана меню не тратьте зря время, указывая множество одиночных конструкции echo, — потом будет очень трудно настроить вывод. Здесь мы встречаем конструкцию, которая обеспечивает ввод данных после слова–ограничителя до того момента, пока вновь не встретится это слово. В этом случае применяется следующий формат:
команда << СЛОВО
любые вводимые данные
СЛОВО
Все это исполъзуется для экрана меню. Можно также воспользоваться этой технологией для экрана помощи. Созданный экран помощи выглядит не слишком информативным.
Для обработки результатов выбора пользователя используется конструкция case. Варианты выбора меню будут следующими:
1: List files in current directory
2: Use the vi editor
3: See who ls on the system
H: Help screen
Q: Exit Menu
Оператор case должен обрабатывать все шаблоны, переводя все строчные символы шаблона в прописные. При этом устраняется риск случайного нажатия пользователем клавиши [Caps Lock], в результате чего могут искажаться вводимые данные. В случае, когда сценарий меню выполняет бесконечный цикл, пользователь нуждается в реализации элегантного выхода. В связи с этим, если пользователь выбирает клавишу [Q] или [q], сценарий должен осуществить выход с нулевым значением.
Если пользователь выполняет некорректный ввод, раздается звуковой сигнал и отображается предостерегающее сообщение. Хотя в начале этой главы упоминалось о том, что будут применяться операторы echo Linux BSD, для генерации звукового сигнала будет применена команда из версии System V:
echo '"