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

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

Жанры

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

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

Шрифт:

{xxx,yyy,zzz,...}

Фигурные скобки.

grep Linux file*.{txt,htm*}

# Поиск всех вхождений слова "Linux"

# в файлах "fileA.txt", "file2.txt", "fileR.html", "file-87.htm", и пр.

Команда интерпретируется как список команд, разделенных точкой с запятой, с вариациями, представленными в фигурных скобках. [ 11 ] При интерпретации имен файлов (подстановка) используются параметры, заключенные в фигурные скобки.

11

Интерпретатор, встретив фигурные скобки, раскрывает их и возвращает полученный список команд, которые затем и исполняет.

Использование неэкранированных или неокавыченных пробелов внутри фигурных скобок недопустимо.

echo {file1,file2}\ :{\ A," B",' C'}

file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

{}

Блок кода. [фигурные скобки] Известен так же как "вложенный блок", эта конструкция, фактически, создает анонимную функцию. Однако, в отличии от обычных функций, переменные, создаваемые во вложенных блоках кода, доступны объемлющему сценарию.

bash$ { local a; a=123; }

bash: local: can only be used in a function

a=123

{ a=321; }

echo "a = $a" # a = 321 (значение, присвоенное во вложенном блоке кода)

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

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

Пример 3-1. Вложенные блоки и перенаправление ввода-вывода

#!/bin/bash

# Чтение строк из файла /etc/fstab.

File=/etc/fstab

{

read line1

read line2

} < $File

echo "Первая строка в $File :"

echo "$line1"

echo

echo "Вторая строка в $File :"

echo "$line2"

exit 0

Пример 3-2. Сохранение результата исполнения вложенного блока в файл

#!/bin/bash

# rpm-check.sh

# Запрашивает описание rpm-архива, список файлов, и проверяется возможность установки.

# Результат сохраняется в файле.

#

# Этот сценарий иллюстрирует порядок работы со вложенными блоками кода.

SUCCESS=0

E_NOARGS=65

if [ -z "$1" ]

then

echo "Порядок

использования: `basename $0` rpm-file"

exit $E_NOARGS

fi

{

echo

echo "Описание архива:"

rpm -qpi $1 # Запрос описания.

echo

echo "Список файлов:"

rpm -qpl $1 # Запрос списка.

echo

rpm -i --test $1 # Проверка возможности установки.

if [ "$?" -eq $SUCCESS ]

then

echo "$1 может быть установлен."

else

echo "$1 -- установка невозможна!"

fi

echo

} > "$1.test" # Перенаправление вывода в файл.

echo "Результаты проверки rpm-архива находятся в файле $1.test"

# За дополнительной информацией по ключам команды rpm см. man rpm.

exit 0

В отличие от групп команд в (круглых скобках), описаных выше, вложенные блоки кода, заключенные в {фигурные скобки} исполняются в пределах того же процесса, что и сам скрипт (т.е. не вызывают запуск дочернего процесса -- subshell). [ 12 ]

{} \;

pathname -- полное имя файла (т.е. путь к файлу и его имя). Чаще всего используется совместно с командой find.

12

Исключение: блок кода, являющийся частью конвейера, может быть запущен в дочернем процессе (subshell-е).

ls | { read firstline; read secondline; }

# Ошибка! Вложенный блок будет запущен в дочернем процессе,

# таким образом, вывод команды "ls" не может быть записан в переменные

# находящиеся внутри блока.

echo "Первая строка: $firstline; вторая строка: $secondline" # Не работает!

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

Обратите внимание на то, что символ ";", которым завершается ключ – exec команды find, экранируется обратным слэшем. Это необходимо, чтобы предотвратить его интерпретацию.

[ ]

test.

Проверка истинности выражения, заключенного в квадратные скобки [ ]. Примечательно, что [ является частью встроенной команды test (и ее синонимом), И не имеет никакого отношения к "внешней" утилите /usr/bin/test.

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

Хорошая девочка

Кистяева Марина
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Хорошая девочка

Наследник с Меткой Охотника

Тарс Элиан
1. Десять Принцев Российской Империи
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Наследник с Меткой Охотника

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

Кротовский, вы сдурели

Парсиев Дмитрий
4. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
рпг
5.00
рейтинг книги
Кротовский, вы сдурели

Измена. Возвращение любви!

Леманн Анастасия
3. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Возвращение любви!

Не лечи мне мозги, МАГ!

Ордина Ирина
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.00
рейтинг книги
Не лечи мне мозги, МАГ!

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Студиозус 2

Шмаков Алексей Семенович
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус 2

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

В погоне за женой, или Как укротить попаданку

Орлова Алёна
Фантастика:
фэнтези
6.62
рейтинг книги
В погоне за женой, или Как укротить попаданку

Господин следователь

Шалашов Евгений Васильевич
1. Господин следователь
Детективы:
исторические детективы
5.00
рейтинг книги
Господин следователь

Имперец. Земли Итреи

Игнатов Михаил Павлович
11. Путь
Фантастика:
героическая фантастика
боевая фантастика
5.25
рейтинг книги
Имперец. Земли Итреи

Жизнь в подарок

Седой Василий
2. Калейдоскоп
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Жизнь в подарок