Linux и UNIX: программирование в shell. Руководство разработчика. - страница 19

стр.

>$ ls conf??.log .

>confl2.log conf.2.log

>conf25.log

Вот как можно найти файлы, имена которых состоят не менее чем из четырех символов, причем первым является символ 'f', а последним — 's':

>$ ls f??*s

>ftpaccess ftphosts ftpconversions ftpusers ftpgroups

4.3. Применение метасимволов […] и [!…]

Метасимволы [… ] соответствуют любому символу из числа тех, что указаны в квадратных скобках. Представленная ниже команда выводит список файлов, имена которых начинаются с символа 'i' или 'o':

>$ ls [io]*

>inetd.conf ioctl.save outputrc

>info‑dir inputrc

>initrunlvl issue

>inittab issue.net

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

>$ ls log.[0-9]*

>log.0323 log.0325 log.0324 log.0326

Метасимволы [!…] соответствуют любому символу из числа тех, что не указаны

в квадратных скобках. Если в предыдущем примере на первом месте в скобках поставить восклицательный знак, команда будет искать файлы с именами log, в расширении которых первый символ не является цифрой: '

>$ ls log.[!0-9]*

>log.sybase

Приведенная ниже команда ищет файлы, имена которых начинаются со строки "LPS", два следующих символа могут быть произвольными, затем идет символ, не являющийся цифрой, а за ним — произвольная строка:

>$ ls LPS??[!0-9]*

>LPSILP LPSOSI LPSOPS LPSPOPQTR

Поиск файлов, имена которых начинаются с символа верхнего регистра, производится посредством такой команды:

>$ ls [A‑Z]*

Следующая команда ищет файлы, имена которых, наоборот, начинаются с символа нижнего регистра:

$ 1а [а–z]*

А эта команда находит файлы, в начале имени которых стоит цифра:

>$ ls [0-9]*

Вот как можно найти все скрытые файлы (такие как .profile, .rhosts, .history и т. д.):

>$ ls .*

4.4. Заключение

Метасимволы представляют собой универсальный инструмент поиска строк по шаблону. С их помощью легко находить нужные файлы и каталоги. Далее мы более подробно рассмотрим способы применения метасимволов в составе регулярных выражений.

ГЛАВА 5

Ввод и вывод данных в интерпретаторе shell

Команды и сценарии могут получать входные данные двумя способами: из стандартного входного потока (связан с клавиатурой) или из файла. Аналогичное разделение существует и при выводе данных: результаты работы команды или сценария по умолчанию направляются на экран терминала, но можно перенаправить их в файл. Если в процессе работы возникают ошибки, сообщения о них тоже отображаются на экране. Чтобы избежать этого, нужно перенаправить поток ошибок в файл.

В этой главе рассматриваются следующие темы:

   • работа со стандартными потоками ввода, вывода и ошибок;

   • переадресация ввода и вывода.

5.1. Команда echo

Команда echo отображает на экране указанную строку текста. Общий ее формат таков:

>echo строка

В строке могут встречаться различные управляющие символы, ниже перечислены основные из них: \c запрет отображения концевого символа новой строки \f прогон страницы \n новая строка \t горизонтальная табуляция

Например, если указать управляющий символ \с, то по завершении вывода не будет осуществлен переход в новую строку:

>$ echo "Как вас зовут?\t\c"

>Как вас зовут? $

Здесь $ -cимвол приглашения.

По умолчанию подразумевается, что в конце строки находится символ новой строки:

>$ echo "Как вас зовут?"

>Как вас зовут? $

В строке можно вычислять значения переменных интерпретатора shell и даже других команд. Например, следующая команда сообщает о том, каков начальный каталог текущего пользователя (переменная среды $номе) и к какому терминалу он подключен (команда tty заключена в обратные кавычки, чтобы интерпретатор shell поместил в строку результат ее выполнения):

>$ echo "Ваш начальный каталог $HOME, вы подключены к терминалу `tty`"

Ваш начальный каталог /home/dave, вы подключены к терминалу /dev/ttyp1

В Linux…

Чтобы запретить вывод символа новой строки, укажите опцию -n:

>$ echo -n "Как вас зовут?"

Управляющие символы по умолчанию не распознаются. Чтобы активизировать их, задайте опцию -e:

>$ echo -e "Как вас зовут?\t\c"

>Как вас зовут? $

Для вывода дополнительных пустых строк используйте управляющий символ \n: