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

Книга "Sed & Awk" (авторы Dougherty и Robbins) дает полное и ясное представление о регулярных выражениях (см. раздел Литература).

<p><strong>18.2. Globbing -- Подстановка имен файлов</strong></p>

Bash, сам по себе, не распознает регулярные выражения. Но в сценариях можно использовать команды и утилиты, такие как sed и awk, которые прекрасно справляются с обработкой регулярных выражений.

Фактически, Bash может выполнять подстановку имен файлов, этот процесс называется "globbing", но при этом не используется стандартный набор регулярных выражений. Вместо этого, при выполнении подстановки имен файлов, производится распознавание и интерпретация шаблонных символов. В число интерпретируемых шаблонов входят символы * и ?, списки символов в квадратных скобках и некоторые специальные символы (например ^, используемый для выполнения операции отрицания). Применение шаблонных символов имеет ряд важных ограничений. Например, если имена файлов начинаются с точки (например так: .bashrc), то они не будут соответствовать шаблону, содержащему символ *[ 48 ]. Аналогично, символ ? в операции подстановки имен файлов имеет иной смысл, нежели в регулярных выражениях.

bash$ ls -l

total 2

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh

-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt

bash$ ls -l t?.sh

-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh

bash$ ls -l [ab]*

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

bash$ ls -l [a-c]*

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

bash$ ls -l [^ab]*

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

-rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh

-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt

bash$ ls -l {b*,c*,*est*}

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1

-rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1

-rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt

bash$ echo *

a.1 b.1 c.1 t2.sh test1.txt

bash$ echo t*

t2.sh test1.txt

Даже команда echo может интерпретировать шаблонные символы в именах файлов.

См. также Пример 10-4.

<p><strong>Глава 19. Подоболочки, или Subshells</strong></p>

Запуск сценария приводит к запуску дочернего командного интерпретатора. Который выполняет интерпретацию и исполнение списка команд, содержащихся в файле сценария, точно так же, как если бы они были введены из командной строки. Любой сценарий запускается как дочерний процесс родительской командной оболочки, той самой, которая выводит перед вами строку приглашения к вводу на консоли или в окне xterm.

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

Список команд в круглых скобках

( command1; command2; command3; ... )

Список команд, в круглых скобках, исполняется в подоболочке.

Значения переменных, определенных в дочерней оболочке, не могут быть переданы родительской оболочке. Они недоступны родительскому процессу. Фактически, они ведут себя как локальные переменные.

<p><strong>Пример 19-1. Область видимости переменных</strong></p>

#!/bin/bash

# subshell.sh

echo

outer_variable=Outer

(

inner_variable=Inner

echo "Дочерний процесс, \"inner_variable\" = $inner_variable"

echo "Дочерний процесс, \"outer\" = $outer_variable"

)

echo

if [ -z "$inner_variable" ]

then

echo "Переменная inner_variable не определена в родительской оболочке"

else

echo "Переменная inner_variable определена в родительской оболочке"

fi

echo "Родительский процесс, \"inner_variable\" = $inner_variable"

# Переменная $inner_variable не будет определена

# потому, что переменные, определенные в дочернем процессе,

# ведут себя как "локальные переменные".

echo

exit 0

См. также Пример 31-1.

+

Смена текущего каталога в дочернем процессе (подоболочке) не влечет за собой смену текущего каталога в родительской оболочке.

<p><strong>Пример 19-2. Личные настройки пользователей</strong></p>

#!/bin/bash

# allprofs.sh: вывод личных настроек (profiles) всех пользователей

# Автор: Heiner Steven

# С некоторыми изменениями, внесенными автором документа.

FILE=.bashrc # Файл настроек пользователя,

#+ в оригинальном сценарии называется ".profile".

for home in `awk -F: '{print $6}' /etc/passwd`

do

[ -d "$home" ] || continue # Перейти к следующей итерации, если нет домашнего каталога.

[ -r "$home" ] || continue # Перейти к следующей итерации, если не доступен для чтения.

(cd $home; [ -e $FILE ] && less $FILE)

done

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных