Выбрать главу

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:

$ echo "Выводим 3 пустые строхи\n\n\nОК"

Выводим 3 пустые строки

OK

В любом месте строки можно размещать символы табуляции:

$ echo "Один символ табуляции\tДве табуляции\t\tOK"

Один символ табуляции Два символа табуляции ОК

Чтобы перенаправить результаты работы команды echo в файл, воспользуйтесь оператором '>':

$ echo "Строка занесена в файл." > myfile

В этом случае содержимое файла myfile будет заменено. Существует также оператор '>>', который позволяет добавить строку в конец файла:

$ echo "Отчет создал пользователь $LOGNAME. `date` " >> myfile

Здесь используется переменная среды $LOGNAME, которая содержит регистрационное имя текущего пользователя.

Рассмотрим содержимое файла myfile:

$ cat myfile

Строка занесена в файл.

Отчет создал пользователь root. Sat May 22 18:25:06 GMT 1999

Одной из проблем, с которыми часто сталкиваются начинающие пользователи при работе с командой echo, является включение в строку двойных кавычек. Символы двойных кавычек имеют специальное назначение в интерпретаторе shell,

поэтому должны быть защищены с помощью обратной косой черты. Вот как выводится на экран строка "/dev/rmt0":

$ echo "\"/dev/rmt0\""

"/dev/rmt0"

5.2. Команда read

Команда read читает одну строку из стандартного входного потока и записывает ее содержимое в указанные переменные. Если задана единственная переменная, в нее записывается вся строка. В результате ввода команды read без параметров строка помешается в переменную среды $reply. При указании нескольких переменных в первую из них записывается первое слово строки, во вторую — второе слово и т. д. Последней переменной присваивается остаток строки.

Общий формат команды таков:

read переменная1 переменная2…

В следующем примере в переменную name записывается весь вводимый с клавиатуры текст до тех пор, пока не будет нажата клавиша [Enter]:

$ read name Джон Алан Доу $ echo $name

Джон Алан Доу

Представленная ниже команда заносит введенные имя и фамилию в две переменные. В качестве разделителя между словами используется пробел.