Э. Сивер, С. Спейнауэр, С. Фиггинс, Дж. П. Хекман - Linux cправочник - 3-е издание (1114666), страница 80
Текст из файла (страница 80)
Если переменнаяимеет значение ignoredups, то в журнал команд не заносятся строки, совпадающие с последней строкой журнала. Значение ignoreboth объединяет оба случая.HISTFILEИмя файла журнала команд, с которым происходит работа.HISTFILESIZEМаксимальное количество строк, хранимых в файле журнала команд.
По умолчанию равно 500.HISTSIZEМаксимальное количество команд, хранимых в журнале. По умолчанию равно 500.Таблица 7.21. Почтовые переменныеПеременнаяОписаниеMAILИмя файла, который проверяется на наличие новых писем.MAILCHECKИнтервал (в секундах) проверки наличия новой почты (60 секундпо умолчанию).MAILPATHСписок имен файлов (элементы разделяются двоеточием), которыенеобходимо проверять на наличие новых писем.Арифметические выражения539Таблица 7.22. Переменные состоянияПеременнаяОписаниеBASHПуть текущего экземпляра интерпретатораBASH_VERSIONНомер версии текущего интерпретатораCOLUMNSКоличество доступных колонок дисплеяDIRSTACKПеречень каталогов, с которыми работают команды pushd и popdEUIDЭффективный идентификатор владельца процесса, выполняющего данную копию интерпретатора, в виде числа, опознаваемого системойGROUPSСписок групп, к которым принадлежит пользователь, в виде чисел, опознаваемых системойHOMEИмя домашнего (начального) каталога пользователяHOSTNAMEУзел, на котором выполняется интерпретаторHOSTTYPEКраткое имя, указывающее тип машины, на которой выполняется интерпретатор; например i486LINESКоличество доступных строк дисплеяMACHTYPEДлинное имя, указывающее тип машины, на которой выполняется интерпретатор; например i486-pc-linux-gnuOLDPWDПредыдущий рабочий каталогOSTYPEКраткий идентификатор операционной системы; например «11nux-gnu»PPIDИдентификатор процесса, породившего текущий интерпретаторPWDТекущий рабочий каталогSECONDSКоличество секунд, прошедших с начала работы интерпретаторав данном сеансеSHELLПуть текущего интерпретатораSHLVLГлубина вложенности работающих интерпретаторовTERMТип терминала, с которым работает пользовательUIDРеальный идентификатор процесса, вызвавшего текущий интерпретатор, в виде числа, опознаваемого системойАрифметические выраженияКоманда let позволяет выполнять целочисленные операции.
Интерпретаторbash предоставляет способ подстановки целых значений (в качестве аргументов команд или в переменные), а также средства перехода от одной системы счисления к другой.Глава 7. bash: командный интерпретатор Борна540ВыражениеЗначение$(( ехрг ))Использовать значение арифметического выражения в скобкахОператорыВ bash применяются операторы языка программирования С; они представлены в нижеследующем списке в порядке понижения приоритета. Для изменения порядка вычисления выражений используются скобки.ОператорЗначениеУнарный минусЛогическое отрицание; двоичная инверсия (дополнение единицы)Умножение, деление, взятие остатка от деления*/%Сложение, вычитаниеПоразрядный сдвиг влево, поразрядный сдвиг вправо<=>=Меньше либо равно, больше либо равноМеньше, большеПроверка на равенство и неравенство (ассоциативность - слева направо)Поразрядное И (AND)Поразрядное исключающее ИЛИ (OR)Поразрядное ИЛИЛогическое И&&Логическое ИЛИПрисваивание значенияПрисваивание после сложения/вычитания*=/=%= Присваивание после умножения/деления/взятия остаткаЛ&= = |=Присваивание после выполнения операции поразрядного AND/XOR/OR«= »= Присваивание после выполнения операции поразрядного сдвига влево/вправоПримерыБолее подробная информация приведена в описании встроенной командыlet.let "count=0" "i=i+1"let "num % 2"Присвоить значения переменным i и countПроверка числа на четностьЖурнал команд541Журнал командbash позволяет отображать и редактировать ранее введенные команды.
По механизму работы эта возможность сходна с журналом интерпретатора С shell.Команды из журнала можно изменять:• В режиме построчного редактирования•С помощью команды fсКроме того, подстановки команд, описанные в главе 8 «Интерпретаторы cshи tcsh», также действительны в bash.Режим построчного редактированияРежим построчного редактирования позволяет эмулировать многие возможности редакторов vi и Emacs. Список команд журнала хранится в файле.После запуска редактора можно с помощью команд перемещаться по строкам файла в поисках нужной строки. Клавиши управления курсором работают на большинстве терминалов как в режиме Emacs, так и в режиме vi.Перед применением найденной строки ее можно изменить.
В табл. 7.23 приведены примеры распространенных команд редактирования строки. Длявыполнения команды необходимо лишь нажать клавишу <Enter>.По умолчанию в режиме построчного редактирования работают сочетанияклавиш Emacs. Чтобы переключиться на vi-редактирование, введите команду:$ set -о viПомните, что vi запускается в режиме вставки; для того чтобы ввести команду vi, необходимо сначала нажать клавишу <Esc>.Режим, установленный для редактирования команд bash, никак не связан свыбором редактора, который автоматически запускается при выполнениимногих команд (в частности, в почтовых клиентах при создании новогописьма). Чтобы изменить стандартный редактор, необходимо установить переменную VISUAL или EDITOR в соответствующее значение (полный путьредактора):$ export EDITOR=emacsТаблица 7.23.
Распространенные сочетания клавиш, используемые дляредактированияviEmacsДействиеkCtrl-PПолучить предыдущую командуjCtrl-NПолучить следующую команду/stringCtrl-R stringПолучить предыдущую команду, которая содержит строку stringhCtrl-BПереместить курсор на символ влевоГлава 7. bash: командный интерпретатор Борна542viEmacsДействие1Ctrl-FПереместить курсор на символ вправоbEsc ВПереместить курсор на слово влевоwEsc FПереместить курсор на слово вправоXDelУдалить предыдущий символXCtrl-DУдалить один символdwEsc DУдалить слово после курсораdbEsc HУдалить слово перед курсоромxpCtrl-TПоменять местами два символаКоманда fcКоманда fc —1 перечисляет команды из журнала, a fc —e позволяет их редактировать. Более подробное описание fc см.
в разделе о встроенных командах.Примеры$$$$historyfc -I 20 30fc -1 -5fc -1 cat$ fc -In 5 > doit$ fc -e vi 5 20$ fc -e emacs$ !!$ !cat$ !cat foo-fileВывести список команд из журнала 1Перечислить команды с 20 по 30Перечислить пять последних командНачиная с последней команды из журнала, вывести списоккоманд, начинающихся с cat 2Сохранить в файле doit все команды, начиная с пятой(без номеров команд) 3Редактировать с 5 по 20 команды с помощьюviРедактировать предыдущую команду с помощью EmacsПовторно выполнить последнюю командуПовторно выполнить последнюю командуcatПовторно выполнить последнюю команду cat, добавив файлfoo-file в конец списка аргументовПодстановка командСинтаксисЗначениеУказание интерпретатору на начало подстановки из журнала командВыполнить последнюю команду123Обещанные 16 команд можно увидеть, если применить команду history 16.
Команда fc —1 выводит список последних 17 команд из журнала. - Примеч. науч. ред.Данная команда делает именно это, а не то, что обещано в книге. — Примеч. науч.ред.Аналогично предыдущему примеру действие команды отлично от обещанного. Примеч. науч. ред.Журнал команд543СинтаксисЗначениеINКоманда номер Л/ из журналаl-NКоманда, отстоящая от текущей на NIstringСамая недавняя команда, начинающаяся со строки stringllstringlСамая недавняя команда, содержащая строку string\1string1%Аргумент самой недавней команды, содержащий строку string!$Последний аргумент предыдущей команды!#Текущая команда до этой точки\\stringВыполнить предыдущую команду с добавлением строки stringIN stringВыполнить команду с номером W с добавлением строки string!{s7}s2Самая недавняя команда, начинающаяся со строки s 1; выполнить с добавлением строки s2~old~new~Быстрая замена; в последней команде заменить строку old на строкуnew и выполнить измененную командуПеременные в приглашенияхПеречисленные ниже переменные позволяют выводить информацию о состоянии интерпретатора или системы непосредственно в приглашении командной строки.
Необходимо инициализировать переменную PS1 строкой,включающей необходимые ключи-переменные. Например, следующая команда инициализирует PS1 строкой, которая содержит переменную \w,обеспечивающую отображение текущего рабочего каталога, и переменную \!,которая позволяет отобразить номер текущей команды. Следующая строкаотражает изменение в приглашении.$ PS1='\w: Command \!$ '"/book/linux: Command 504$Некоторые из переменных являются относительно новыми, как \j и \1, поэтому они могут не поддерживаться более старыми версиями bash.Переменная Результат подстановки\аЗвуковой сигнал\dДата в формате «Mon May 8»\еТерминальная escape-последовательность (не путать с символом обратного слэша)\ЬИмя узла\jЧисло фоновых заданий (активных или приостановленных)544Глава 7.
bash: командный интерпретатор БорнаПеременная Результат подстановки\1Имя текущего терминала\пСимвол новой строки\гВозврат каретки\8Текущий интерпретатор\tВремя в 24-часовом формате; 3:30 p.m. отображается как 15:30:00\UРегистрационное имя пользователя\vВерсия и выпуск bash\wТекущий рабочий каталог\HАналогично \h\TВремя в 12-часовом формате; 3:30 p.m. отображается как 03:30:00\VВерсия, выпуск и patch-версия bash\wПоследний компонент (следующий за последним разделителем /) имени текущего рабочего каталога\\Символ «обратный слэш»\!Порядковый номер текущей команды в журнале\#Порядковый номер текущей команды; отсчет начинается с моментазапуска интерпретатора, первая команда имеет номер 1\@Время в 12-часовом формате; 3:30 p.m. отображается как 03:30 p.m.\$Индикатор пользователя; отображается как # для пользователя root икак $ - для всех остальных пользователей\[Начало последовательности неотображаемых символов; последовательность должна заканчиваться символами \]\]Окончание последовательности неотображаемых символов, начатойсимволами \[\nnnASCII-символ, соответствующий восьмеричному числу пппВстроенные командыПримеры, которые можно использовать в командной строке, начинаются сприглашения $.
В ином случае приведенный код можно рассматривать какпригодный к применению в сценариях. Для удобства включены некоторыеиз зарезервированных слов, используемых многострочными командами.Встроенные команды#545#Игнорировать весь текст, следующий за символом «#» в тойже строке. Символ используется в сценариях для записикомментариев и по сути не является командой.#\shellИспользуется в качестве первой строки сценария для вызовауказанного командного интерпретатора (возможна передача аргументов). Некоторые из старых не-Linux систем не работают со сценариями, начинающимися с такой строки.Например:#!/bin/bashПустая команда. Код возврата— 0.
Если является первымсимволом файла, обозначает сценарий bash. За символом «:»может следовать переменная интерпретатора; в таком случае комбинация заменяется значением переменной.ПримерПроверить, работает ли конкретный пользователь в системе:if who | grep $1 > /dev/nullthen :# ничего не происходит# если найдено соответствие шаблонуelse echo "User $1 is not logged in"fi. file [arguments}Идентично source.alias [—p] [name[='cmd']]Создать псевдоним для применения в качестве синонима команды cmd. Если опущен параметр ='cmd', отображается текущее значение для псевдонима пате; если и параметр пате опущен или указан параметр —р, отображаются все существующие псевдонимы. См.