Мендель Купер - Искусство программирования на языке сценариев командной оболочки
- Название:Искусство программирования на языке сценариев командной оболочки
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Мендель Купер - Искусство программирования на языке сценариев командной оболочки краткое содержание
Данное руководство не предполагает наличие у читателя познаний в области программирования на языке сценариев, однако, быстро восполняет этот недостаток, постепенно, шаг за шагом раскрывая мудрость и красоту UNIX. Это руководство может рассматриваться как учебник, предназначенный для самостоятельного изучения или как справочник по программированию на shell. Руководство снабжено серией хорошо прокомментированных примеров, поскольку лучший путь к изучению языка сценариев -- это написание сценариев.
Искусство программирования на языке сценариев командной оболочки - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
#include
/* Программа на C "Hello, world." */
int main()
{
printf( "Hello, world." );
return (0);
}
bash$ gcc -o hello hello.c
#!/bin/bash
# hello.sh
greeting=`./hello`
echo $greeting
bash$ sh hello.sh
Hello, world.
Альтернативой обратным одиночным кавычкам, используемым для подстановки команд, можно считать такую форму записи: $(COMMAND).
output=$(sed -n /"$1"/p $file) # К примеру из "grp.sh".
# Запись в переменную содержимого текстового файла.
File_contents1=$(cat $file1)
File_contents2=$(<$file2) # Bash допускает и такую запись.
Примеры подстановки команд в сценариях:
1. Пример 10-7
2. Пример 10-26
3. Пример 9-26
4. Пример 12-2
5. Пример 12-15
6. Пример 12-12
7. Пример 12-39
8. Пример 10-13
9. Пример 10-10
10. Пример 12-24
11. Пример 16-7
12. Пример A-19
13. Пример 27-1
14. Пример 12-32
15. Пример 12-33
16. Пример 12-34
Глава 15. Арифметические подстановки
Арифметические подстановки -- это мощный инструмент, предназначенный для выполнения арифметических операций в сценариях. Перевод строки в числовое выражение производится с помощью обратных одиночных кавычек, двойных круглых скобок или предложения let.
Вариации
Арифметические подстановки в обратных одиночных кавычках (часто используются совместно с командой expr)
z=`expr $z + 3` # Команда 'expr' вычисляет значение выражения.
Арифметические подстановки в двойных круглых скобках, и предложение let
В арифметических подстановках, обратные одиночные кавычки могут быть заменены на двойные круглые скобки $((...))или очень удобной конструкцией, с применением предложения let.
z=$(($z+3))
# $((EXPRESSION)) -- это подстановка арифметического выражения. # Не путайте с
#+ подстановкой команд.
let z=z+3
let "z += 3" # Кавычки позволяют вставляьб пробелы и специальные операторы.
# Оператор 'let' вычисляет арифметическое выражение,
#+ это не подстановка арифметического выражения.
Все вышеприведенные примеры эквивалентны. Вы можете использовать любую из этих форм записи "по своему вкусу".
Примеры арифметических подстановок в сценариях:
1. Пример 12-6
2. Пример 10-14
3. Пример 25-1
4. Пример 25-6
5. Пример A-19
Глава 16. Перенаправление ввода/вывода
В системе по-умолчанию всегда открыты три "файла" -- stdin (клавиатура), stdout (экран) и stderr (вывод сообщений об ошибках на экран). Эти, и любые другие открытые файлы, могут быть перенапрвлены. В данном случае, термин "перенаправление" означает получить вывод из файла, команды, программы, сценария или даже отдельного блока в сценарии (см. Пример 3-1 и Пример 3-2) и передать его на вход в другой файл, команду, программу или сценарий.
С каждым открытым файлом связан дескриптор файла [ 44 ] дескриптор файла -- это просто число, по которому система идентифицирует открытые файлы. Рассматривайте его как упрощенную версию указателя на файл.
. Дескрипторы файлов stdin, stdout и stderr -- 0, 1 и 2, соответственно. При открытии дополнительных файлов, дескрипторы с 3 по 9 остаются незанятыми. Иногда дополнительные дескрипторы могут сослужить неплохую службу, временно сохраняя в себе ссылку на stdin, stdout или stderr [ 45 ] При использрвании дескриптора с номером 5 могут возникать проблемы. Когда Bash порождает дочерний процесс, например командой exec, то дочерний процесс наследует дескриптор 5 как "открытый" (см. архив почты Чета Рамея (Chet Ramey), SUBJECT: RE: File descriptor 5 is held open) Поэтому, лучше не использовать этот дескриптор.
. Это упрощает возврат дескрипторов в нормальное состояние после сложных манипуляций с перенаправлением и перестановками (см. Пример 16-1).
COMMAND_OUTPUT >
# Перенаправление stdout (вывода) в файл.
# Если файл отсутствовал, то он создется, иначе -- перезаписывается.
ls -lR > dir-tree.list
# Создает файл, содержащий список дерева каталогов.
: > filename
# Операция > усекает файл "filename" до нулевой длины.
# Если до выполнения операции файла не существовало,
# то создается новый файл с нулевой длиной (тот же эффект дает команда 'touch').
# Символ : выступает здесь в роли местозаполнителя, не выводя ничего.
> filename
# Операция > усекает файл "filename" до нулевой длины.
# Если до выполнения операции файла не существовало,
# то создается новый файл с нулевой длиной (тот же эффект дает команда 'touch').
# (тот же результат, что и выше -- ": >", но этот вариант неработоспособен
# в некоторых командных оболочках.)
COMMAND_OUTPUT >>
# Перенаправление stdout (вывода) в файл.
# Создает новый файл, если он отсутствовал, иначе -- дописывает в конец файла.
# Однострочные команды перенаправления
# (затрагивают только ту строку, в которой они встречаются):
# --------------------------------------------------------------------
1>filename
# Перенаправление вывода (stdout) в файл "filename".
1>>filename
# Перенаправление вывода (stdout) в файл "filename", файл открывается в режиме добавления.
2>filename
# Перенаправление stderr в файл "filename".
2>>filename
# Перенаправление stderr в файл "filename", файл открывается в режиме добавления.
&>filename
# Перенаправление stdout и stderr в файл "filename".
#==============================================================================
# Перенаправление stdout, только для одной строки.
LOGFILE=script.log
echo "Эта строка будет записана в файл \"$LOGFILE\"." 1>$LOGFILE
echo "Эта строка будет добавлена в конец файла \"$LOGFILE\"." 1>>$LOGFILE
echo "Эта строка тоже будет добавлена в конец файла \"$LOGFILE\"." 1>>$LOGFILE
echo "Эта строка будет выведена на экран и не попадет в файл \"$LOGFILE\"."
# После каждой строки, сделанное перенаправление автоматически "сбрасывается".
# Перенаправление stderr, только для одной строки.
ERRORFILE=script.errors
bad_command1 2>$ERRORFILE # Сообщение об ошибке запишется в $ERRORFILE.
bad_command2 2>>$ERRORFILE # Сообщение об ошибке добавится в конец $ERRORFILE.
bad_command3 # Сообщение об ошибке будет выведено на stderr,
#+ и не попадет в $ERRORFILE.
# После каждой строки, сделанное перенаправление также автоматически "сбрасывается".
#==============================================================================
2>&1
# Перенаправляется stderr на stdout.
# Сообщения об ошибках передаются туда же, куда и стандартный вывод.
i>&j
# Перенаправляется файл с дескриптором i в j .
# Вывод в файл с дескриптором i передается в файл с дескриптором j .
>&j
# Перенаправляется файл с дескриптором 1 (stdout) в файл с дескриптором j .
# Вывод на stdout передается в файл с дескриптором j .
0< FILENAME
< FILENAME
# Ввод из файла.
# Парная команде ">", часто встречается в комбинации с ней.
#
# grep search-word
[j]<>filename
# Файл "filename" открывается на чтение и запись, и связывается с дескриптором "j".
# Если "filename" отсутствует, то он создается.
# Если дескриптор "j" не указан, то, по-умолчанию, бередся дескриптор 0, stdin.
#
# Как одно из применений этого -- запись в конкретную позицию в файле.
Читать дальшеИнтервал:
Закладка: