Литвек - электронная библиотека >> Мендель Купер >> Другие языки и системы программирования и др. >> Искусство программирования на языке сценариев командной оболочки >> страница 108
параметров.

(обратно)

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).

(обратно)

56

Каталог /dev содержит специальные файлы -- точки монтирования физических и виртуальных устройств. Они занимают незначительное пространство на диске.

Некоторые из устройств, такие как /dev/null, /dev/zero или /dev/urandom -- являются виртуальными. Они не являются файлами физических устройств, система эмулирует эти устройства программным способом.

(обратно)

57

Блочное устройство читает и/или пишет данные целыми блоками, в отличие от символьных устройств, которые читают и/или пишут данные по одному символу. Примером блочного устройства может служить жесткий диск, CD-ROM. Примером символьного устройства -- клавиатура.

(обратно)

58

Отдельные системные команды, такие как procinfo, free, vmstat, lsdev и uptime делают это именно таким образом.

(обратно)

59

Bash debugger (автор: Rocky Bernstein) частично возмещает этот недостаток.

(обратно)

60

В соответствии с соглашениями, сигнал с номером 0 соответствует команде exit.

(обратно)

61

Установка этого бита на файлы сценариев не имеет никакого эффекта.

(обратно)

62

ANSI -- аббревиатура от American National Standards Institute.

(обратно)

63

См. статью Marius van Oers, Unix Shell Scripting Malware, а также ссылку на Denning в разделе Литература.

(обратно)

64

Chet Ramey обещал ввести в Bash ассоциативные массивы (они хорошо знакомы программистам, работающим с языком Perl) в одном из следующих релизов Bash.

(обратно)

65

Кто может -- тот делает. Кто не может... тот получает сертификат MCSE.

(обратно)

66

Если адресное пространство не указано, то, по-умолчанию, к обработке принимаются все строки.

(обратно)

67

Указание кода завершения за пределами установленного диапазона, приводит к возврату ошибочных кодов. Например, exit 3809 в

(обратно)