Основы программирования в Linux | страница 35



). Вы почти наверняка знаете о применении символа >* как знака подстановки, соответствующего строке символов. Но вы можете не знать о существовании односимвольного знака подстановки, >?, а конструкция >[set] позволяет проверить любое количество одиночных символов, >[^set] — применяет логическую операцию "НЕ" к множеству, т.е. включает все, кроме того, что вы задали. Подстановочный шаблон из фигурных скобок >{} (доступен в некоторых командных оболочках, включая bash) позволяет формировать множество из произвольных строк, которое командная оболочка раскроет. Например, команда

>$ ls my_{finger, toe}s

будет выводить файлы my_fingers и my_toes. Эта команда использует оболочку для проверки всех файлов в текущем каталоге. Мы вернемся к этим правилам соответствия шаблонам в конце главы, когда будем более подробно рассматривать утилиту >grep и возможности регулярных выражений.

Опытные пользователи ОС Linux, вероятно, выполнят эту операцию более эффективным способом, возможно, с помощью следующей команды:

>$ more `grep -l POSIX *`

или синонимической конструкции

>$ more $(grep -l POSIX *)

В дополнение команда

>$ grep -l POSIX * | more

выведет на экран имя файла, содержащего строку >POSIX. В этом сценарии мы видим, что командная оболочка для выполнения трудной работы привлекает другие команды, например, >grep и >more. Оболочка просто позволяет собрать вместе несколько имеющихся команд новыми оригинальными способами. В следующих сценариях вы увидите использование знаков подстановки неоднократно. Мы подробно рассмотрим целую область подстановок, когда будем знакомиться с регулярными выражениями в разделе, посвященном команде >grep.

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

Создание сценария

С помощью любого текстового редактора необходимо создать файл, содержащий команды. Создайте файл с именем first с таким содержимым:

>#!/bin/sh


># first

># Этот файл просматривает все файлы в текущем каталоге

># для поиска строки POSIX, а затем выводит имена

># найденных файлов в стандартный вывод.


>for file in *

>do

> if grep -q POSIX $file

> then

>  echo $file

> fi

>done


>exit 0

Комментарий начинается со знака ># и продолжается до конца строки. Принято знак ># ставить в первой символьной позиции строки. Сделав такое общее заявление, далее отметим, что первая строка