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 многословныйБолее 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Пример: явное связывание функци и преобразования файлов
Пример: явное связывание функци и преобразования файлов Программа 2.4, предназначенная для преобразования кодировки текстовых файлов из ASCII в Unicode, вызывает функцию Asc2Un (программа 2.5), выполняющую обработку файла с использованием операций файлового ввода/вывода. Программа
Использование команды timep
Использование команды timep Теперь мы можем воспользоваться командой timep для анализа производительности различных вариантов программ копирования файлов и их преобразования из ASCII в Unicode, таких, например, как утилиты atou (программа 2.4) и sortMP (программа 5.5). Некоторые из
4.7. Команды архивирования файлов
4.7. Команды архивирования файлов При работе с Linux вы, может быть, еще не скоро встретитесь с необходимостью работать с большинством консольных команд, поскольку имеются такие оболочки, как Midnight Commander или графические оболочки типа KDE. Но с командами архивирования (точнее,
14.6.4 Команды пересылки файлов
14.6.4 Команды пересылки файлов Команды из таблицы 14.4 применяются с целью установки соединения для данных, копирования файлов и восстановления при перезапуске.Таблица 14.4 Команды поддержки пересылки файлов Команда Определение Параметр(ы) ALLO Выделяет (резервирует)
15.4.2.1. Учебный пример: использование make для преобразования файла документации
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 для преобразования файла документации
15.4.2.1. Учебный пример: использование make для преобразования файла документации В make-файле программы fetchmail, например, есть три правила, которые связывают файлы FAQ, FEATURES и NOTES с исходными HTML-файлами fetchmail-FAQ.html, fetchmail-features.html и design-notes.html.HTML-файлы предназначены для просмотра на
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