20.2.5. Использование команды getopts для преобразования файлов

20.2.5. Использование команды getopts для преобразования файлов

А теперь воспользуемся сценарием tr_case, который преобразуем с помощью только что изученной команды getopts. Существует единственное отличие между методами getopts и shift, применяемыми для обработки опций командной строки. Это отличие заключается в том, что в первом случае используется опция verbose.

Переменная verbose имеет значение "по", заданное по умолчанию; но при перехвате значения опции командной строки с помощью конструкции case переменной verbose присваивается значение "yes". Отображение команд на экране осуществляется с помощью простой конструкции if.

if [ "VERBOSE"="on" ]; then

echo "doing upper on $LOOP..newflie called $LOOP$EXT"

fi

Если применяется оболочка для системных команд, которые всегда отображают результаты своих действий, то вывод, включающий произвольные ошибки, просто перенаправляется в /dev/null.

command > /dev/null 2>&1

По умолчанию переменная verbose не установлена (нет отображения). Активизировать эту переменную можно посредством опции -v. Например, для преобразования серии файлов myfiles в символы нижнего регистра с помощью VERBOSE применяется следующий формат:

tr_case -1 -v myfilel myfile2…

либо

tr_case -v -1 myfilel myfile2…

Сразу же бросается в глаза заметное сокращение объема программного кода при использовании команды getopts. Код, применяемый для обработки файлов, аналогичен коду с командой shift.

Пример сценария:

$ pg tr_case2

#!/bin/sh

#tr_case2

# преобразование регистра, используется команда getopts

ЕХТ=""

TRCASE=""

FLAG=""

OPT="no"

VERBOSE="off"

while getopts :luv OPTION

do

case $OPTION in

l)

TRCASE="lower"

EXT=".LC"

OPT=yes

;;

u)

TRCASE="upper"

EXT=".UC"

OPT=yes

;;

v)

VERBOSE=on

;;

?) echo "usage: `basename $0`: -[l|u] —v file[s]"

exit 1

;;

esac

done

#следующий аргумент, пожалуйста

shift `expr $OPTIND -1`

#есть аргументы ???

if [ "$#"="0" ] || [ "$OPT"="no" ] then

echo "usage: `basename $0`: -[l|u] — v file[s]" >&2

exit 1

fi

for LOOP in "$@" do

if [ ! — f $LOOP ] then

echo "`basename $0`: Error cannot find file $LOOP" >&2

exit 1

fi

echo $TRCASE $LOOP

case $TRCASE in

lower)

if [ "VERBOSE"="on" ]; then

echo "doing…lower on $LOOP..newflie called $LOOP$EXT"

fi

cat $LOOP | tr "[a?z]" "[A?Z]" >$LOOP$EXT

;;

upper) if [ "VERBOSE"="on" ]; then

echo "doing upper on $LOOP..newflie called $LOOP$EXT"

fi

cat $LOOP | tr "[A?Z]" "[a?z]" >$LOOP$EXT

;;

esac

done

При указании опций командной строки в сценариях было бы неплохо придерживаться соглашений о наименовании, принятых в UNIX либо Linux. В следующей таблице описываются некоторые общие опции и их значения.

Опция Значение
-a добавление
-c счетчик, копирование
-d каталог, устройство
-e выполнение
-f имя файла, форсировать
-h справка
-i игнорировать регистр
-1 журнальный файл
-o полный вывод
-q полностью
-p путь
-v многословный
Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

4.7. Команды архивирования файлов

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

4.7. Команды архивирования файлов При работе с Linux вы, может быть, еще не скоро встретитесь с необходимостью работать с большинством консольных команд, поскольку имеются такие оболочки, как Midnight Commander или графические оболочки типа KDE. Но с командами архивирования (точнее,


15.4.2.1. Учебный пример: использование make для преобразования файла документации

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

15.4.2.1. Учебный пример: использование make для преобразования файла документации В make-файле программы fetchmail, например, есть три правила, которые связывают файлы FAQ, FEATURES и NOTES с исходными HTML-файлами fetchmail-FAQ.html, fetchmail-features.html и design-notes.html.HTML-файлы предназначены для просмотра на


15.4.2.1. Учебный пример: использование make для преобразования файла документации

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

15.4.2.1. Учебный пример: использование make для преобразования файла документации В make-файле программы fetchmail, например, есть три правила, которые связывают файлы FAQ, FEATURES и NOTES с исходными HTML-файлами fetchmail-FAQ.html, fetchmail-features.html и design-notes.html.HTML-файлы предназначены для просмотра на


Пример: явное связывание функци и преобразования файлов

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Пример: явное связывание функци и преобразования файлов Программа 2.4, предназначенная для преобразования кодировки текстовых файлов из ASCII в Unicode, вызывает функцию Asc2Un (программа 2.5), выполняющую обработку файла с использованием операций файлового ввода/вывода. Программа


Использование команды timep

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Использование команды timep Теперь мы можем воспользоваться командой timep для анализа производительности различных вариантов программ копирования файлов и их преобразования из ASCII в Unicode, таких, например, как утилиты atou (программа 2.4) и sortMP (программа 5.5). Некоторые из


14.6.4 Команды пересылки файлов

Из книги VBA для чайников автора Каммингс Стив

14.6.4 Команды пересылки файлов Команды из таблицы 14.4 применяются с целью установки соединения для данных, копирования файлов и восстановления при перезапуске.Таблица 14.4 Команды поддержки пересылки файлов Команда Определение Параметр(ы) ALLO Выделяет (резервирует)


11.1. Сортировка файлов с помощью команды sort

Из книги автора

11.1. Сортировка файлов с помощью команды sort Команда sort позволяет выполнять сортировку входного потока по различным полям (ключам сортировки). Это довольно мощная команда, которая весьма полезна при обработке журнальных файлов или реорганизации текстовых столбцов в


11.3. Объединение файлов с помощью команды join

Из книги автора

11.3. Объединение файлов с помощью команды join Команда join выполняет соединение строк из двух текстовых файлов на основании совпадения указанных полей. Ее действие напоминает операцию join языка SQL. Механизм работы команды таков:   1. Каждый из двух входных файлов разбивается


18.5.3. Использование команды ls совместно с циклом for

Из книги автора

18.5.3. Использование команды ls совместно с циклом for Этот цикл оценивает команду ls интерпретатора shell и отображает сведения о файлах текущего каталога.$ pg forls#!/bin/sh# forlsfor loop in `ls` doecho $LOOP done$


20.1.3. Преобразования файла с помощью команды shift

Из книги автора

20.1.3. Преобразования файла с помощью команды shift Использование возможностей команды shift значительно облегчает работу с опциями командной строки. Рассмотрим сценарий, выполняющий преобразование регистра символов. При этом будет применяться команда tr.При выполнении


20.2.2. Принцип работы команды getopts

Из книги автора

20.2.2. Принцип работы команды getopts Команда getopts считывает строку строка_параметров. При этом она выбирает корректные опции, которые могут быть применены в сценарии.Команда getopts разыскивает все аргументы, начинающиеся дефисом, и определяет значения всех опций. Затем


20.2.3. Указание значений опций с помощью команды getopts

Из книги автора

20.2.3. Указание значений опций с помощью команды getopts Иногда для сценариев требуется включение фактического значения одной из опций командной строки. При этом используется команда getopts. Все, что требуется для этого сделать, — вставить двоеточие после буквы опции параметра


26.1.1. Применение команды date для создания журнальных файлов

Из книги автора

26.1.1. Применение команды date для создания журнальных файлов Если возникла необходимость создать журнальный файл, желательно сделать его уникальным. Для этого достаточно воспользоваться командой date. Командой date можно манипулировать, а также добавлять ее к имени файла,


26.5.1. Использование команды logger

Из книги автора

26.5.1. Использование команды logger В командной строке интерпретатора shell введите следующую команду:$ logger -p notice "This is a test message. Please Ignore $LOGNAME"Возможно, вам придется подождать пару минут, пока не отобразится информация о регистрации сообщения.$ tail /var/adm/messagesJun 17 10:36:49 acers6 dave: This is a test