- •Лабораторная работа № 5 «Программирование в командном процессоре ос unix»
- •5.1 Командные процессоры (оболочки)
- •5.2 Переменные в языке программирования bash
- •Использование арифметических вычислений. Операторы let и read
- •Арифметические операторы оболочки bash
- •5.3 Метасимволы и их экранирование
- •5.4 Командные файлы и функции
- •5.4.1 Передача параметров в командные файлы и специальные переменные
- •5.4.3 Управление последовательностью действий в командных файлах
- •5.4.2 Использование команды getopts
- •5.5 Оператор цикла for
- •5.6 Оператор выбора case
- •5.7 Условный оператор if
- •5.8 Операторы цикла while и until
- •5.9 Прерывание циклов
- •Задание на лабораторную работу
- •Контрольные вопросы
5.4.2 Использование команды getopts
Весьма необходимой при программировании является команда getopts, которая осуществляет синтаксический анализ командной строки, выделяя флаги, и используется для объявления переменных. Синтаксис команды следующий:
getopts option-string variable [arg . . . ]
Флаги – это опции командной строки, обычно помеченные знаком минус; Например, -F является флагом для команды ls -F. Иногда эти флаги имеют аргументы, связанные с ними. Программы интерпретируют эти флаги, соответствующим образом изменяя свое поведение.
Строка опций option-string – это список возможных букв и чисел соответствующего флага. Если ожидается, что некоторый флаг будет сопровождаться некоторым аргументом, то за этой буквой должно следовать двоеточие. Соответствующей переменной присваивается буква данной опции. Если команда getopts может распознать аргумент, она возвращает истину. Принято включать getopts в цикл while и анализировать введенные данные с помощью оператора case.
Предположим, необходимо распознать командную строку следующего формата: testprog -ifile_in.txt -ofile_out.doc -L -t -r. Вот как выглядит использование оператора getopts в этом случае:
while getopts o:i:Ltr optletter do case $optletter in o) oflag=1; oval=$OPTARG;; i) iflag=1;ival=$OPTARG;; L) Lflag=1;; t) tflag=1;; r) rflag=1;; *) echo Illegal option $optletter esac done
Функция getopts включает две специальные переменные среды–OPTARG и OPTIND. Если ожидается дополнительное значение, то OPTARG устанавливается в значение этого аргумента (будет равна file_in.txt для опции ifile_out.doc для опции o). OPTIND является числовым индексом на упомянутый аргумент. Функция getopts также понимает переменные типа массив, следовательно, можно использовать ее в функции не только для синтаксического анализа аргументов функций, но и для анализа введенных пользователем данных.
5.4.3 Управление последовательностью действий в командных файлах
Часто бывает необходимо обеспечить проведение каких-либо действий циклически и управление дальнейшими действиями в зависимости от результатов проверки некоторого условия. Для решения подобных задач язык программирования bash предоставляет Вам возможность использовать такие управляющие конструкции, как for, case, if и while. С точки зрения командного процессора эти управляющие конструкции являются обычными командами и могут использоваться как при создании командных файлов, так и при работе в интерактивном режиме. Команды, реализующие подобные конструкции, по сути дела являются операторами языка программирования bash. Поэтому при описании языка программирования bash термин "оператор" будет использоваться наравне с термином "команда".
Команды ОС UNIX возвращают код завершения, значение которого может быть использовано для принятия решения о дальнейших действиях. Команда test, например, создана специально для использования в командных файлах. Единственная функция этой команды заключается в выработке кода завершения. Так например, команда
test -f file
возвращает нулевой код завершения ("истина"), если файл file существует, и ненулевой код завершения ("ложь") в противном случае.
test s – истина, если аргумент s имеет значение "истина";
test -f file – истина, если файл file существует;
test -i file – истина, если файл file доступен по чтению;
test -w file – истина, если файл file доступен по записи;
test -e file – истина, если файл file - исполняемая программа;
test -d file – истина, если файл file является каталогом.
