Чтение онлайн

на главную - закладки

Жанры

Тайм-менеджмент для системных администраторов
Шрифт:

Она хорошо встраивается в JJAT-файл (в DOS) или в сценарий оболочки UNIX/Linux.

Вот пример сценария makeimage1, в котором используется эта команда:

#!/bin/bash

mkisofs — D -l — J -r — L -f — P "Limoncelli" — V 'date — u +%m%d' $*

Конструкция 'date — u +%m%d' создает метку тома, содержащую текущую дату.

Я долго не мог создавать хорошие сценарии, потому что не знал, как обрабатывать параметры командной строки. Расскажу, как следует копировать их в сценарий.

Конструкция $* в сценарии означает «любые элементы командной строки». Если вы введете:

$ makeimage1 cdrom/

то последовательность $*

будет заменена на cdrom/.

Поскольку $* работает и с несколькими аргументами, вы можете ввести:

$ makeimage1 cdrom/ dir1/ dir2/

В этом случае вместо $* будут подставлены все три аргумента. Команда mkisofs сольет (merge) все три каталога на CD-ROM. Если вы хотите указать конкретные элементы командной строки, пишите $1, $2 и т. д. В нашем примере $1 будет соответствовать cdrom/, а $2 — dir1/.

Еще одной причиной, не позволявшей мне писать хорошие сценарии, было мое неумение обрабатывать флаги командной строки, например scriptname — q file1.txt. Если сценарий, который требовалось написать, был настолько сложен, что требовал учета флагов командной строки, я использовал другой язык или вообще отказывался от создания сценария. Оказывается, в bash есть функция getopt, которая выполняет синтаксический разбор. Однако руководство по bash написано не совсем понятно. В нем сказано, как работает getopt, но не объясняется, как пользоваться этой функцией. Наконец, я нашел подходящий пример и с тех пор периодически копирую его. Неважно, как он работает. Чтобы воспользоваться им, вам совсем необязательно понимать, что он делает и почему. А выглядит он так:

args='getopt ab: $*'

if [$?!= 0]

then

echo "Usage; command [-a] [-b file.txt] file1 file2…"

exit -1

fi

set — $args

for i

do

case "$i"

in

– a)

FLAGA=1

shift

;;

– b)

ITEMB="$2"; shift

shift

;;

– )

shift; break

;;

esac

done

Предполагается, что есть некая команда с флагами — а и — b. Второй флаг особый, потому что за ним должен следовать аргумент, например — b file.txt. Из первой строчки понятно, что за командой getopt следуют буквы, которые могут быть флагами. После флага, которому требуется дополнительный аргумент, стоит двоеточие. Далее мы видим оператор case (выбор) для каждого возможного аргумента. Код оператора либо устанавливает флаг, либо устанавливает флаг и сохраняет аргумент.

А что такое $2? И какой смысл в — )? И что делает set? И как поживает Наоми? Все это вы сможете узнать потом. А сейчас воспользуйтесь образцом, и он будет работать.

(Ну ладно. Если вы вправду хотите в этом разобраться, прочитайте «Advanced Bash-Scripting Guide» (Расширенное руководство по написанию скриптов bash) по адресу

Теперь я приведу более развернутый пример, иллюстрирующий некоторые дополнительные возможности. Во-первых, в нем определяется функция usage, предназначенная для вывода справочной информации. Интересная особенность этой функции — команда echo, растянутая на несколько строк. Неплохо, не так ли? bash не возражает. Во-вторых, в этом сценарии проверяется наличие минимального количества (MINITEMS) элементов командной строки после обработки

аргументов. Наконец, сценарий демонстрирует обработку флагов, переопределяющих умолчания.

Пожалуйста, пользуйтесь этим кодом, если вам понадобится преобразовать простой сценарий в сценарий, обрабатывающий параметры и флаги:

#!/bin/bash

MINITEMS=1

function usage

{

echo "

Usage: $0 [-d] [-a author] [-c file.txt] [-h] dir1 [dir1…]

– d debug, don't actual run command

– a author name of the author

– c copyright override default copyright file

– h this help message

"

exit 1

}

# Задание умолчаний:

DEBUG=false

DEBUGCMD=

AUTHOR=

COPYRIGHT=copyright.txt

# Обработка аргументов командной строки

# с возможным переопределением умолчаний

args='getopt da: c:h $*'

if [$?!= 0]

then

usage

fi

set — $args

for i

do

case "$i"

in

– h)

usage

shift

;;

– a)

AUTHOR="$2"; shift

shift

;;

– c)

COPYRIGHT="$2"; shift

shift

;;

– d)

DEBUG=true

shift

;;

– )

shift; break;;

esac

done

if $DEBUG; then

echo DEBUG MODE ENABLED.

DEBUGCMD=echo

fi

# Проверка наличия минимального количества элементов

# командной строки

if $DEBUG; then echo ITEM COUNT = $#; fi

if [$# — lt "$MINITEMS"]; then

usage

fi

# Если первый аргумент особый, запомнить его:

# ТНЕIТЕМ="$1"; shift

# Клонируйте эту строчку для каждого элемента,

# который хотите сохранить.

# Не забудьте при этом откорректировать значение

# переменной MINITEMS.

# Если вы хотите обработать остальные элементы,

# делайте это здесь:

# for i in $*; do

# echo Looky! Looky! I got $i

# done

if [!
– z "$COPYRIGHT"];

then

if $DEBUG; then echo Setting copyright to: $COPYRIGHT; fi

CRFLAG="-copyright $COPYRIGHT"

fi

LABEL='date — u +%Y%m%d'

$DEBUGCMD mkisofs — D -l — J -r — L -f — P "$AUTHOR" — V $LABEL $CRFLAG $*

Построение длинной командной строки

Самый лучший способ научиться сцеплять команды UNIX/Linux в один длинный канал — заглядывать через плечо того, кто этим занимается. Сейчас я попробую научить вас делать это, создав на ваших глазах небольшую утилиту.

Книга «Think UNIX» (Думайте в духе UNIX), Que, — отличный учебник по объединению инструментов UNIX/Linux в длинные команды.

Самой мощной технологией, представленной в UNIX/Linux, является возможность объединить несколько команд аналогично тому, как наращивают садовый шланг для поливки. Если у вас есть программа, которая преобразует входной текст в верхний регистр, и программа, сортирующая строки в файле, то вы можете сцепить их друг с другом. В результате вы получите команду для преобразования строк в верхний регистр и их вывода в заданном порядке. Все, что от вас требуется, — это поставить символ «|» между командами. Выходная информация одной команды поступит на вход следующей:

Поделиться:
Популярные книги

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Орден Багровой бури. Книга 5

Ермоленков Алексей
5. Орден Багровой бури
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Орден Багровой бури. Книга 5

Адвокат Империи 7

Карелин Сергей Витальевич
7. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 7

АН (цикл 11 книг)

Тарс Элиан
Аномальный наследник
Фантастика:
фэнтези
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
АН (цикл 11 книг)

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Вспоминай меня ночью

Рам Янка
Любовные романы:
современные любовные романы
эро литература
5.60
рейтинг книги
Вспоминай меня ночью

Адвокат вольного города 3

Кулабухов Тимофей
3. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Адвокат вольного города 3

На границе империй. Том 9. Часть 5

INDIGO
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 5

Адвокат вольного города 4

Кулабухов Тимофей
4. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Адвокат вольного города 4

Земная жена на экспорт

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.57
рейтинг книги
Земная жена на экспорт

Варлорд

Астахов Евгений Евгеньевич
3. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Варлорд

Баронесса. Эхо забытой цивилизации

Верескова Дарья
1. Проект «Фронтир Вита»
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Баронесса. Эхо забытой цивилизации

Неудержимый. Книга XVII

Боярский Андрей
17. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVII

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений