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
Джон Алан Доу
Представленная ниже команда заносит введенные имя и фамилию в две переменные. В качестве разделителя между словами используется пробел.