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

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

Жанры

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

hexdump

Выводит дамп двоичных данных из файла в восьмеричном, шестнадцатиричном, десятичном виде или в виде ASCII. Эту команду, с массой оговорок, можно назвать эквивалентом команды of od.

objdump

Отображает содержимое исполняемого или объектного файла либо в шестнадцатиричной форме, либо в виде дизассемблерного листинга (с ключом -d).

bash$ objdump -d /bin/ls

/bin/ls: file format elf32-i386

Disassembly of section .init:

080490bc <.init>:

80490bc: 55 push %ebp

80490bd: 89 e5 mov %esp,%ebp

. . .

mcookie

Эта

команда создает псевдослучайные шестнадцатиричные 128-битные числа, так называемые "magic cookie", обычно используется X-сервером в качестве "сигнатуры" авторизации. В сценариях может использоваться как малоэффективный генератор случайных чисел.

random000=`mcookie | sed -e '2p'`

# 'sed' удаляет посторонние символы.

Конечно, для тех же целей, сценарий может использовать md5.

# Сценарий вычисляет контрольную сумму для самого себя.

random001=`md5sum $0 | awk '{print $1}'`

# 'awk' удаляет имя файла.

С помощью mcookie можно создавать "уникальные" имена файлов.

Пример 12-43. Генератор имен файлов

#!/bin/bash

# tempfile-name.sh: Генератор имен временных файлов

BASE_STR=`mcookie` # 32-символьный (128 бит) magic cookie.

POS=11 # Произвольная позиция в строке magic cookie.

LEN=5 # $LEN последовательных символов.

prefix=temp # В конце концов это временный ("temp") файл.

suffix=${BASE_STR:POS:LEN}

# Извлечь строку, длиной в 5 символов, начиная с позиции 11.

temp_filename=$prefix.$suffix

# Сборка имени файла.

echo "Имя временного файла = \"$temp_filename\""

# sh tempfile-name.sh

# Имя временного файла = temp.e19ea

exit 0

units

Эта утилита производит преобразование величин из одних единиц измерения в другие. Как правило вызывается в интерактивном режиме, ниже приводится пример использования units в сценарии.

Пример 12-44. Преобразование метров в мили

#!/bin/bash

# unit-conversion.sh

convert_units # Принимает в качестве входных параметров единицы измерения.

{

cf=$(units "$1" "$2" | sed --silent -e '1p' | awk '{print $2}')

# Удаляет все кроме коэффициентов преобразования.

echo "$cf"

}

Unit1=miles

Unit2=meters

cfactor=`convert_units $Unit1 $Unit2`

quantity=3.73

result=$(echo $quantity*$cfactor | bc)

echo "В $quantity милях $result метров."

#

Что произойдет, если в функцию передать несовместимые единицы измерения,

#+ например "acres" (акры) and "miles" (мили)?

exit 0

m4

Не команда, а клад, m4– - это мощный фильтр обработки макроопределений [ 37 ] , фактически -- целый язык программирования. Изначально создававшаяся как препроцессор для RatFor, m4 оказалась очень полезной и как самостоятельная утилита. Фактически, m4 сочетает в себе функциональные возможности eval, tr, awk, и дополнительно предоставляет обширные возможности по созданию новых макроопределений.

37

макроопределение -- это идентификатор, символическая константа, которая представляет некоторую последовательность команд, операций и параметров.

В апрельском выпуске, за 2002 год, журнала Linux Journal вы найдете замечательную статью, описывающую возможности утилиты m4.

Пример 12-45. Пример работы с m4

#!/bin/bash

# m4.sh: Демонстрация некоторых возможносией макропроцессора m4

# Строки

string=abcdA01

echo "len($string)" | m4 # 7

echo "substr($string,4)" | m4 # A01

echo "regexp($string,[0-1][0-1],\&Z)" | m4 # 01Z

# Арифметика

echo "incr(22)" | m4 # 23

echo "eval(99 / 3)" | m4 # 33

exit 0

doexec

Команда doexec предоставляет возможность передачи произвольного списка аргументов внешней программе. В частности, передавая argv[0] (для сценариев соответствует специальной переменной $0), можно вызвать программу под другим именем, определяя тем самым, ее реакцию.

Например, Пусть в каталоге /usr/local/bin имеется программа с именем "aaa", которая при вызове doexec /usr/local/bin/aaa list выведет список всех файлов в текущем каталоге, имена которых начинаются с символа "a", а при вызове той же самой программы как doexec /usr/local/bin/aaa delete , она удалит эти файлы.

Естественно, реакция программы на свое собственное имя должна быть реализована в коде программы, для сценария на языке командной оболочки это может выглядеть примерно так:

case `basename $0` in

"name1" ) реакция на вызов под именем name1;;

"name2" ) реакция на вызов под именем name2;;

"name3" ) реакция на вызов под именем name3;;

* ) действия по-умолчанию;;

esac

Глава 13. Команды системного администрирования

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

Я не князь. Книга XIII

Дрейк Сириус
13. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я не князь. Книга XIII

Последний попаданец 11. Финал. Часть 1

Зубов Константин
11. Последний попаданец
Фантастика:
фэнтези
юмористическое фэнтези
рпг
5.00
рейтинг книги
Последний попаданец 11. Финал. Часть 1

Покоритель Звездных врат

Карелин Сергей Витальевич
1. Повелитель звездных врат
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Покоритель Звездных врат

Совок-8

Агарев Вадим
8. Совок
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Совок-8

Столичный доктор. Том III

Вязовский Алексей
3. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Столичный доктор. Том III

Король Масок. Том 1

Романовский Борис Владимирович
1. Апофеоз Короля
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Король Масок. Том 1

Ищу жену для своего мужа

Кат Зозо
Любовные романы:
любовно-фантастические романы
6.17
рейтинг книги
Ищу жену для своего мужа

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Темный Охотник 2

Розальев Андрей
2. Темный охотник
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Темный Охотник 2

Идеальный мир для Лекаря 20

Сапфир Олег
20. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 20

Обыкновенные ведьмы средней полосы

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Обыкновенные ведьмы средней полосы

Возвышение Меркурия. Книга 16

Кронос Александр
16. Меркурий
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 16

Адепт. Том 1. Обучение

Бубела Олег Николаевич
6. Совсем не герой
Фантастика:
фэнтези
9.27
рейтинг книги
Адепт. Том 1. Обучение

Идущий в тени 4

Амврелий Марк
4. Идущий в тени
Фантастика:
боевая фантастика
6.58
рейтинг книги
Идущий в тени 4