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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 87 88 89 90 91 92 93 94 95 96

22

Если $parameter "пустой",в неинтерактивных сценариях, то это будет приводить к завершению с кодом возврата 127 ("command not found").

23

Эти команды являются встроенными командами языка сценариев командной оболочки (shell), в то время как while, case и т.п. -- являются зарезервированными словами.

24

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

25

Опция -- это аргумент, который управляет поведением сценария и может быть либо включен, либо выключен. Аргумент, который объединяет в себе несколько опций (ключей), определяет поведение сценария в соответствии с отдельными опциями, объединенными в данном аргументе..

26

Как правило, исходные тексты подобных библиотек, на языке C, располагаются в каталоге /usr/share/doc/bash-?.??/functions.

Обратите внимание: ключ -f команды enable может отсутствовать в некоторых системах.

27

Тот же эффект можно получить с помощью typeset -fu.

28

Скрытыми считаются файлы, имена которых начинаются с точки, например, ~/.Xdefaults. Такие файлы не выводятся простой командой ls, и не могут быть удалены командой rm -rf *. Как правило, скрытыми делаются конфигурационные файлы в домашнем каталоге пользователя.

29

Это верно только для GNU-версии команды tr, поведение этой команды, в коммерческих UNIX-системах, может несколько отличаться.

30

Команда tar czvf archive_name.tar.gz * включит в архив все скрытые файлы (имена которых начинаются с точки) из вложенных подкаталогов. Это недокументированная "особенность" GNU-версии tar.

31

Она реализует алгоритм симметричного блочного шифрования, в противоположность алгоритмам шифрования с "открытым ключом", из которых широко известен pgp.

32

Демон -- это некий фоновый процесс, не привязанный ни к одной из терминальных сессий. Демоны предназначены для выполнения определенного круга задач либо через заданные промежутки времени, либо по наступлению какого либо события.

Слово "демон" ("daemon"), в греческой мифологии, употреблялось для обозначения призраков, духов, чего-то мистического, сверхестественного. В мире UNIX -- под словом демон подразумевается процесс, который "тихо" и "незаметно" выполняет свою работу.

33

Фактически -- это сценарий, заимствованный из дистрибутива Debian Linux.

34

Очередь печати -- это группа заданий "ожидающих вывода" на принтер.

35

Эта тема прекрасно освещена в статье, которую написал Andy Vaught, Introduction to Named Pipes, в сентябре 1997 для Linux Journal.

36

EBCDIC (произносится как "ebb-sid-ic") -- это аббревиатура от Extended Binary Coded Decimal Interchange Code (Расширенный Двоично-Десятичный Код Обмена Информацией). Это формат представления данных от IBM, не нашедший широкого применения. Не совсем обычное применение опции conv=ebcdic -- это использовать dd для быстрого и легкого, но слабого, шифрования текстовых файлов.

cat $file | dd conv=swab,ebcdic > $file_encrypted

# Зашифрованный файл будет выглядеть как "абракадабра".

# опция swab добавлена для внесения большей неразберихи.

cat $file_encrypted | dd conv=swab,ascii > $file_plaintext

# Декодирование.

37

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

38

Команда userdel завершится неудачей, если удаляемый пользователь в этот момент работает с системой

39

Дополнительную информацию по записи компакт-дисков, вы найдете в статье Алекса Уизера (Alex Wither): Creating CDs, в октябрьском выпуске журнала Linux Journal за 1999 год.

40

Утилита mke2fs, с ключом -c, так же производит поиск поврежденных блоков.

41

Пользователи небольших, десктопных Linux-систем предпочитают утилиты попроще, например tar.

42

NAND -- логическая операция "И-НЕ". В общих чертах она напоминает вычитание.

43

Замещающая команда может быть внешней системной командой, внутренней (встроенной) командой или даже функцией в сценарии.

44

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

45

При использрвании дескриптора с номером 5 могут возникать проблемы. Когда Bash порождает дочерний процесс, например командой exec, то дочерний процесс наследует дескриптор 5 как "открытый" (см. архив почты Чета Рамея (Chet Ramey), SUBJECT: RE: File descriptor 5 is held open) Поэтому, лучше не использовать этот дескриптор.

46

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

47

[47]Поскольку с помощью sed, awk и grep обрабатывают одиночные строки, то обычно символ перевода строки не принимается во внимание. В тех же случаях, когда производится разбор многострочного текста, метасимвол "точка" будет соответствовать символу перевода строки.

#!/bin/bash

sed -e 'N;s/.*/[&]/' << EOF # Встроенный документ

line1

line2

EOF

# OUTPUT:

# [line1

# line2]

echo

awk '{ $0=$1 "n" $2; if (/line.1/) {print}}' << EOF

line 1

line 2

EOF

# OUTPUT:

# line

# 1

# Спасибо S.C.

exit 0

48

Подстановка таких имен файлов возможна, но только при условии, что символ точки будет явно присутствовать в шаблоне.

~/[.]bashrc # Не будет соответствовать имени ~/.bashrc

~/?bashrc # То же самое.

# Метасимволы не могут соответствовать символу точки при подстановке имен файлов.

~/.[b]ashrc # Имя ~./bashrc будет соответствовать данному шаблону

~/.ba?hrc # Аналогично.

~/.bashr* # Аналогично.

# Установка ключа "dotglob" отключает такое поведение интерпретатора.

# Спасибо S.C.

49

Имеет тот же эффект, что и именованные каналы (временный файл), фактически, именованные каналы некогда использовались в операциях подстановки процессов.

50

Механизм косвенных ссылок на переменные (см. Пример 34-2) слишком неудобен для передачи аргументов по ссылке.

#!/bin/bash

ITERATIONS=3 # Количество вводимых значений.

icount=1

my_read () {

# При вызове my_read varname,

# выводит предыдущее значение в квадратных скобках,

# затем просит ввести новое значение.

local local_var

echo -n "Введите говое значение переменной "

eval 'echo -n "[$'$1'] "' # Прежнее значение.

read local_var

[ -n "$local_var" ] && eval $1=$local_var

# Последовательность "And-list": если "local_var" не пуста, то ее значение переписывается в "$1".

}

echo

while [ "$icount" -le "$ITERATIONS" ]

do

my_read var

echo "Значение #$icount = $var"

let "icount += 1"

echo

done

# Спасибо Stephane Chazelas за этот поучительный пример.

exit 0

51

Команда return -- это встроенная команда Bash.

52

Herbert Mayer определяет рекурсию, как "...описание алгоритма с помощью более простой версии того же самого алгоритма..." Рекурсивной называется функция, которая вызывает самого себя.

53

Слишком глубокая рекурсия может вызвать крах сценария.

#!/bin/bash

recursive_function ()

{

(( $1 < $2 )) && recursive_function $(( $1 + 1 )) $2;

# Увеличивать 1-й параметр до тех пор,

#+ пока он не станет равным, или не превысит, второму параметру.

}

recursive_function 1 50000 # Глубина рекурсии = 50,000!

# Само собой -- Segmentation fault.

# Рекурсия такой глубины может "обрушить" даже программу, написанную на C,

#+ по исчерпании памяти, выделенной под сегмент стека.

# Спасибо S.C.

exit 0 # Этот сценарий завершает работу не здесь, а в результате ошибки Segmentation fault.

54

Однако, псевдонимы могут "раскручивать" позиционные параметры.

55

Это не относится к таким оболочкам, как csh, tcsh и другим, которые не являются производными от классической Bourne shell (sh).

1 ... 87 88 89 90 91 92 93 94 95 96
На этой странице вы можете бесплатно читать книгу Искусство программирования на языке сценариев командной оболочки - Мендель Купер бесплатно.
Похожие на Искусство программирования на языке сценариев командной оболочки - Мендель Купер книги

Оставить комментарий