Мендель Купер - Искусство программирования на языке сценариев командной оболочки
Название: | Искусство программирования на языке сценариев командной оболочки | |
Автор: | Мендель Купер | |
Жанр: | Другие языки и системы программирования, Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Unix, Системное программирование | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Искусство программирования на языке сценариев командной оболочки"
Данное руководство не предполагает наличие у читателя познаний в области программирования на языке сценариев, однако, быстро восполняет этот недостаток, постепенно, шаг за шагом раскрывая мудрость и красоту UNIX. Это руководство может рассматриваться как учебник, предназначенный для самостоятельного изучения или как справочник по программированию на shell. Руководство снабжено серией хорошо прокомментированных примеров, поскольку лучший путь к изучению языка сценариев -- это написание сценариев.
К этой книге применимы такие ключевые слова (теги) как: Bash Linux Unix Shell
Читаем онлайн "Искусство программирования на языке сценариев командной оболочки". [Страница - 166]
# Декодирование.
(обратно)
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.