Э. Сивер, С. Спейнауэр, С. Фиггинс, Дж. П. Хекман - Linux cправочник - 3-е издание (1114666), страница 79
Текст из файла (страница 79)
7.15.532Глава 7. bash: командный интерпретатор БорнаТаблица 7.15. Символы перенаправления ввода/выводаСимволДействие>fileПеренаправление стандартного потока вывода в файл file<fileПолучение стандартного потока ввода из файла filecmdl | cmd2Конвейер. Стандартный поток вывода команды cmdl перенаправляется в стандартный поток ввода команды cmd2»fileПеренаправление стандартного потока вывода в файл file с добавлением данных к концу файла, если таковой уже существует>\ fileПринудительное перенаправление стандартного потока вывода в файлf i l e , даже в режиме работы noclobbern>\ fileПеренаправление вывода файлового дескриптора п в файл f i l e , даже врежиме работы noclobber<> fileИспользовать файл f i l e и как стандартный поток ввода, и как стандартный поток вывода«textВыполнять чтение из стандартного ввода до появления строки, идентичной строке text (строка может храниться в переменной окружения).
Ввод обычно осуществляется с клавиатуры. Программы, с которыми чаще всего используется этот синтаксис, - cat, echo, ex и sed.Если вводимый текст text заключается в кавычки, то в нем не подставляются значения переменных, результаты работы команд и т. п.n>fileПеренаправить файловый дескриптор п в f i l en<fileПрисвоить файлу file файловый дескриптор п>&nДублировать стандартный поток вывода в файловый дескриптор п<&nДублировать стандартный поток ввода из файлового дескриптора п&>fileПеренаправить стандартный поток вывода и стандартный поток ошибок в файл f i l e<&-Закрыть стандартный поток ввода>&-Закрыть стандартный поток выводаn>&-Закрыть вывод из файлового дескриптора пn<&-Закрыть ввод из файлового дескриптора пПримеры$ cat parti > book$ cat part2 parts » book$ mail tim < report$ grep Chapter part* 2> error_file$ sed 's/"/XX /' « END_ARCHIVE> This is often how a shell archive is "wrapped",> bundling text for distribution.
You would normallyСинтаксис533> run sed from a shell program, not from the command line.> END_ARCHIVEXX This is often how a shell archive is "wrapped",XX bundling text for distribution. You would normallyXX run sed from a shell program, not from the command line.Для того чтобы перенаправить стандартный поток вывода в стандартный поток ошибок, можно использовать следующую команду:$ echo "Usage error: see administrator" 1>&2Следующая команда записывает результат (список файлов) в файл filelist, aсообщения об ошибках (файлы, к которым нет доступа) - в файл no_access:$ find / -print > filelist 2>no_aocessСопроцессыСопроцессы являются уникальной возможностью интерпретатора bash и вдругих интерпретаторах не встречаются.СинтаксисДействиеcmdl \ стс/2 |&Сопроцессы; выполнять конвейерную последовательность в фоновом режиме.
Командный интерпретатор создает двунаправленныйконвейер, позволяя перенаправлять одновременно стандартныйввод и стандартный вывод.read -p varЧитать ввод сопроцесса в переменную var.print -p stringПередать строку string сопроцессу.cmd <&pВводом для команды cmd являются данные сопроцесса.cmd >&pВывод команды cmd перенаправляется сопроцессу.Примерыcat memoSufficient unto the day isA word to the wise.ed - memo |&print -p /word/read -p searchprint "Ssearch"A word to the wise.Отобразить содержимое файлаЗапустить сопроцессыПослать команду ed сопроцессуПрочитать вывод ed в переменную searchОтобразить строку на стандартный вывод534Глава 7.
bash: командный интерпретатор БорнаПеременныеПеременные предваряются символом $ и могут заключаться в фигурныескобки. Значения переменным можно присваивать с помощью знака равенства (=), пробелы по обе стороны которого не допустимы.$ TMP=temp.fileПо умолчанию переменные «видны» только в текущем сеансе интерпретатора. Чтобы передать переменную другим программам, выполняющимся в интерпретаторе, необходимо воспользоваться встроенной командой export.Если переменная индексируется числом в квадратных скобках ([]), она считается массивом. Например:$ DIR_LIST[0]=src$ DIR_LIST[1]=headers$ Is ${DIR_LIST[1]}Перечисляется содержимое каталога headers. Многие подстановки и команды в этой главе обрабатывают каждый элемент массива отдельно.В этом разделе представлены:• Подстановка переменных• Встроенные переменные интерпретатораПодстановка переменныхВ приводимых ниже подстановках фигурные скобки являются необязательными, кроме тех случаев, когда необходимо отделить имя переменной отследующих символов, которые в ином случае считались бы частью этогоимени.ПеременнаяЗначение${var}Значение переменной va r.Имя программы.Отдельные аргументы командной строки (позиционные параметры);Значение п лежит в интервале [1, 9].Количество аргументов командной строки.Все аргументы командной строки.Аналогично $ *, но содержимое разделяется на слова, если переменная заключена в двойные кавычки.Номер процесса текущего интерпретатора; часто используется какчасть имени файла при создании временных файлов с уникальнымиименами.$?Код завершения последней команды (0 обычно означает успешное завершение).ПеременныеПеременная535ЗначениеНомер процесса последней фоновой команды.Текущие параметры выполнения (см.
описание встроенной командыset). По умолчанию для сценариев имеет значение ЬВ, а для диалоговых интерпретаторов - hiniBH.Изначально имеет значение имени файла, выполненного для запускатекущего интерпретатора, затем заново устанавливается при выполнении каждой команды и имеет значение предыдущей команды, которая была выполнена.Ниже в табл. 7.16.-7.18. перечислены различные типы операторов, которыемогут применяться для работы с переменными в bash.Таблица 7.16.
Операторы, подстановкиОператорПодстановка${иагпате \-word]Если переменная varname существует и ее значение не пустое, вернуть это значение; иначе вернуть word.Назначение:Возврат значения по умолчанию, если переменная не определена.Пример:${ count:—0} принимает значение 0, если значение переменной count не определено.${varname:=word}Если переменная varname существует и ее значение не пустое, вернуть его; иначе установить значение переменной вword и вернуть значение word. Позиционные и специальныепараметры не могут получать значения таким образом.Назначение:Установка значения переменной по умолчанию, если переменная не определена.Пример:${count:=0} устанавливает значение переменной count в О,если значение переменной не определено.${varname:"!message}Если переменная varname существует и ее значение не пустое, вернуть это значение; иначе отобразить имя varname,сопроводив его сообщением message, а затем прекратить выполнение текущей команды или сценария (только в пакетном режиме работы интерпретатора).
Если параметр messageопущен, выводится стандартное сообщение «parameter nullor not set» (значение не существует или не установлено).Назначение:Предотвращение ошибок из-за неопределенности переменных.Пример:{$count:?»undefined!»} выдаст сообщение «count: undefined!» и завершит работу сценария, если переменная count неопределена.Глава 7.
bash: командный интерпретатор Борна536ОператорПодстановка${varname:+word}Если переменная varname существует и ее значение не пустое, вернуть word', иначе вернуть пустое значение.Назначение:Проверка существования переменной .Пример:${count:+l} возвращает 1 (которую можно интерпретировать как true), если переменная count определена.${#varname}Вернуть длину переменной varname.Назначение:Подготовка к замене или извлечению подстрок .Пример:Если ${USER} имеет значение root, то ${#USER} принимает значение 4.Таблица 7.17.
Операторы поиска по шаблонуОператорЗначение${variable#pattern}Если начало значения переменной соответствует шаблону,удалить соответствующую часть минимально возможнойдлины и вернуть остаток.${variable##pattern}Если начало значения переменной соответствует шаблону,удалить соответствующую часть максимально возможнойдлины и вернуть остаток.${variable% pattern}Если конец значения переменной соответствует шаблону,удалить соответствующую часть минимально возможнойдлины и вернуть остаток.${variable% %pattern) Если конец значения переменной соответствует шаблону,удалить соответствующую часть максимально возможнойдлины и вернуть остаток.${var/pat/sub}Вернуть значение переменной var, заменив первое вхождение pat на sub.
Может применяться к переменным $* и $@; вэтом случае каждое слово обрабатывается отдельно. Еслистрока pat начинается с символа #, происходит привязка кначалу строки var; если строка pat заканчивается символом%, то привязка к концу строки var.${var//pat/sub]Вернуть значение var, заменив все вхождения pat на sub.${variable:n}Усечь начало значения переменной и вернуть часть, котораяначинается с символа с порядковым номером п. Первый символ имеет номер 0.${variable:n:l}Вернуть подстроку длины I, которая начинается с символа спорядковым номером п. Первый символ имеет номер 0.Переменные537Таблица 7.18. Вычисление выраженийОператорЗначение$((arithmetic-expression))Вернуть результат вычисления выражения. Арифметические операторы описаны в разделе «Арифметическиевыражения».Пример:При выполнении TODAY='date +% -d' ; echo $((TODAY+7))номер текущего дня недели сохраняется в $TODAY, затем к этому значению прибавляется 7 (номер этого же дняна следующей неделе) и сумма выводится на экран.[[$condition]]Вернуть значение 1, если условие condition истинно, впротивном случае - 0.
Синтаксис условий приведен в описании встроенной команды test.Встроенные переменные интерпретатораВстроенные переменные автоматически устанавливаются интерпретатороми, как правило, используются в сценариях. Встроенные переменные могутработать с шаблонами подстановок переменных, которые описаны выше.При установке значений переменных символ $ не применяется, но при ихпоследующем использовании он необходим.В табл.
7.19.-7.22 описаны наиболее часто встречающиеся встроенные переменные bash.Таблица 7.19. Переменные, определяющие поведениеПеременнаяОписаниеauto resumeРазрешить переход фонового процесса в режим приоритетного выполнения при вводе подстроки, содержащейся в командной строке процесса. Возможные значения: substring(введенная команда является подстрокой исходной), exact(введенная команда в точности совпадает с исходной) либоиное значение (введенная команда совпадает с началом исходной).BASH_ENVФайл, содержащий выполняемые при старте команды; используется при вызове bash для выполнения сценария.CDPATHСписок каталогов, в которых выполняется поиск аргументакоманды cd; элементы разделяются двоеточием.EDITORПуть текстового редактора пользователя.IPSРазделитель слов; используется интерпретатором команддля разбора команд на элементы.IGNOREEOFЗапретить применение одиночной комбинации CTRL-D длявыхода из интерпретатора; при этом для выхода используется команда exit.Глава 7.
bash: командный интерпретатор Борна538ПеременнаяОписаниеPATHСписок каталогов, в которых происходит поиск выполняемых команд. Элементы списка разделяются двоеточием.PROMPT COMMAND Команда, выполняемая bash перед выдачей следующегоприглашения командной строки.PS1Первичное приглашение командной строки. В разделе «Переменные в приглашениях» описаны способы отображениядинамически меняющейся информации в приглашениях интерпретатора, в частности, текущего рабочего каталога илиномера команды в журнале.PS2Вторичное приглашение новой строки для незаконченнойкоманды.PS3Приглашение встроенной команды select.PS4Приглашение, отображаемое при отладке с параметром -х(см. раздел «Запуск интерпретатора») и встроенной командой set.Таблица 7,20. Переменные журнала командПеременнаяОписаниеFCEDITПуть редактора, используемого совместно с командой fc.HISTCMDПорядковый номер текущей команды в журнале команд.HISTCONTROL Если переменная имеет значение ignorespace, то строки, начинающиеся пробелом, не попадают в журнал команд.