next up previous contents
Next: 6.6 zsh Up: 6. Оболочки Previous: 6.4 Сравнительные характеристики оболочек

Подраздел



6.5 bash

6.5.1 Специальные файлы

/etc/profile

выполняется автоматически во время процедуры login, если эта оболочка (bash) указана в файле /etc/passwd.


$HOME/.bash_profile

выполняется автоматически во время процедуры login.


$HOME/.bashrc

выполняется автоматически во время запуска оболочки.


$HOME/.bash_logout

выполняется автоматически во время процедуры logout.


$HOME/.bash_history

в этом файле содержатся команды, которые были выданы с терминала во время последней сессии.


/etc/passwd

из этого файла берутся имена домашних каталогов для аббревиатур типа Ename.


6.5.2 Метасимволы в именах файлов

[*]

любая строка нулевой или ненулевой длины;


[?]

любой символ;


[abc...]

любой из символов, заключенных в скобки; между символами может быть знак "-" (минус), чтобы обозначить символьный интервал, например, [a-g] символы начиная с "a" до "g";


[!abc...]

любые символы, которые не эквивалентны тем, что стоят в скобках;


каталог пользователя с именем name;

текущий рабочий каталог;

предыдущий рабочий каталог.

6.5.3 Редактирование в командной строке bash

Возможности редактирования в командной строке, которые предоставляет оболочка bash ,довольно разнообразны и могут удовлетворить различные вкусы и предпочтения пользователей. Автор не═уверен, что перечислил все возможные средства редактирования командной строки, которые реализует bash, а лишь те что являются, по мнению автора, наиболее используемыми. Кроме того, свойства редактирования могут зависеть также от версии оболочки. Автор пользовался оболочкой GNU bash, version 1.14.7(1).

CTRL-a

переместить курсор на самый левый символ строки;


CTRL-b

переместить курсор на один символ влево;


ESCc символ, на который указывает курсор, заменить на═тот же, но заглавный, а курсор переместить на первый пробел справа от текущего слова;

DEL

удалить символ, слева от курсора;


CTRL-d

удалить символ, на которй показывает курсор;


CTRL-e

переместить курсор на самый правый символ строки;


CTRL-f

переместить курсор на один символ вправо;


CTRL-k

удалить правую часть строки начиная с символа, на который указывает курсор;


CTRL-l

очистить экран и поместить текущую команду в верхней строке экрана;


ESCl превратить символы начиная с символа, на который указывает курсор, до самого правого символа в данном слове в прописные буквы, а курсор установить на пробел справа от слова;

CTRL-m

то же что RETURN;


CTRL-o

то же что RETURN, затем отображается очередная команда из файла история;


CTRL-t

поменять местами два символа: символ, на который показывает курсор, и символ слева от курсора, затем, курсор переместить на один символ вправо;


ESCt поменять местами два слова: слово, на которое указывает курсор и слово слева от первого;

CTRL-u удалить левую часть строки включая символ, который находится слева от курсора;

А вот некоторые дополнительные команды редактирования командной строки.

ESCu сделать символы данного слова заглавными, начиная с символа, на который указывает курсор, до самого правого символа в слове, а курсор установить на пробел справа от слова;

CTRL-y

вернуть часть строки удал©нную ранее с помощью CTRL/u: эта часть строки вставляется в текущую строку справа от курсора;


ESC. вставить последнее слово из предыдущей команды перед символом, на который указывает курсор;

CTRL -[ то же, что ESC;

ESC _ то же, что ESC.

6.5.4 Специальное редактирование в bash

<

В оболочке bash имеются специальные комбинации управляющих символов, которые помогают сократить как время на печатание полных им©н команд, файлов, переменных окружения, так и время на поиск нужных им©н, которые могут оказаться совсем не короткими. Эти средства позволяют bash "догадаться" какое имя файла или какую команду вы имеете в виду и подставляет соответствующие имена в ответ на ввод описываемых ниже кодовых комбинаций.

TAB оболочка пытается выполнить общий алгоритм подстановки текста в командной строке. Если вы попробуете ввести в пустой командной строке этот символ ( TAB), то после первого ввода вы получите звуковой сигнал, а после второго получите примерно следующее сообщение: "There are 2179 possibilities. Do you really wish to see them all? (y or n)". Если вы ввели несколько символов команды, а после этого была нажата клавиша TAB, то вы получите значительно менее длинный список возможных команд. Если команда введена, то вы получите список им©н файлов.

ESC? напечатать список возможных завершений текста;

ESC/ попытаться завершить имя файла;

CTRL-x/ напечатать список возможных завершений имени файла;

попытаться завершить имя пользователя;

напечатать список возможных завершений имени пользователя;

ESC$ попытаться завершить имя переменной окружения;

CTRL-X$ список возможных завершений для имени переменной окружения.

ESC@ попытка возможного завершения для сетевого имени машины;

CTRL-X@ напечатать список возможных сетевых имен машин;

ESC! попытка завершения имени команды;

CTRL-x! список возможных завершений имени команды;

ESC TAB попытка завершения имени команды из прежних команд, выданных в сессии.

6.5.5 Выполнение команд bash

< cmd $\textstyle \parbox{12.5cm}{%
выполнение команды {\it cmd};
}$


cmd & $\textstyle \parbox{12.5cm}{%
выполнение команды {\it cmd} в фоне;
}$


cmd; cmd1 $\textstyle \parbox{12.5cm}{%
последовательное выполнение двух команд {\it cmd}, затем {\it cmd1}; \\
}$


( cmd; cmd1 ) $\textstyle \parbox{12.5cm}{%
запускается дополнительная bash-оболочка для выполнения двух команд
как командной группы;
}$


cmd C cmd1 $\textstyle \parbox{12.5cm}{%
трубопровод или программный канал: стандартный выв...
...ы {\it cmd}
используется в качестве стандартного ввода в команде {\it cmd1}.
}$


cmd cmd1 $\textstyle \parbox{12.5cm}{%
подстановка команд: результат выполнения команды {\it cmd1} используется в
качестве
параметра в команде {\it cmd}.
}$


cmd $cmd1 $\textstyle \parbox{12.5cm}{%
командная подстановка: результат команды {\it cmd1} используется в
качестве параметра к команде {\it cmd}.
}$


cmd && cmd1 $\textstyle \parbox{12.5cm}{%
командный AND: команда {\it cmd1} выполняется только в том случае, если
{\it cmd} выполнена успешно.
}$


cmd CC cmd1 $\textstyle \parbox{12.5cm}{%
командный OR: команда {\it cmd1} выполняется только в том случае, если
{\tt cmd} выполнена НЕуспешно.
}$


{ cmd; cmd1 } $\textstyle \parbox{12.5cm}{%
выполнить последовательность команд в текущей обол...
...ми и командами должны быть пробелы, иначе
оболочка даст информацию об ошибке.
}$

6.5.6 Встроенные команды bash

<


#$\textstyle \parbox{14cm}{%
Игнорировать текст, который следует за символом реш...
...ервой строке за
знаком решетка следует восклицательный знак (\symbol{''21}).
}$


#! $\textstyle \parbox{14cm}{%
используется для указания оболочки, которая будет ин...
...вать данный
скрипт. Например:
\symbol{''23}\symbol{''21}/usr/local/bin/tcsh
}$


: $\textstyle \parbox{14cm}{%
пустая команда. Возвращает код завершения 0 (нуль). ...
...окружения могут быть помещены после двоеточия, чтобы подставить их
значения.
}$


. $\textstyle \parbox{14cm}{%
{\it\bf .\enskip file\enskip [arguments]}
\linebreak
то же что команда {\it\bf source}.
}$


alias $\textstyle \parbox{14cm}{%
{\tt {\bf alias} [name[='cmd']]}
\index{alias}
\line...
...едует пробел, то проверяется
очередной аргумент на предмет другого синонима.
}$


bg $\textstyle \parbox{14cm}{%
{\tt\bf bg\enskip [jobIDs]}
\index{bg}
\linebreak
поместить данное задание в фоновый режим.
}$


bind $\textstyle \parbox{14cm}{%
{\tt\bf bind}\enskip{\it [options]}
\index{bind}
\li...
...on} отобразить связывание, которое вызывает {\it
function}.
\end{itemize}\par
}$


break $\textstyle \parbox{12.5cm}{%
\hbox to 3cm{ {\tt\bf break [n]} }
\index{break}
в...
...f n-1}.
Кроме этого, команда используется для выхода из {\tt\bf select}.
\par
}$


built-in $\textstyle \parbox{12.5cm}{%
\hbox to 3cm{ {\tt\bf built-in} {\it command [argu...
...а не другую. Полезно,
когда скрипт имеет то же имя, что и встроенная команда.
}$


case $\textstyle \parbox{12.5cm}{%
\hbox to 3cm{ {\tt\bf case} {\it string} }
\index{...
...ому выражению {\it regex}, то
выполнить следующие команды {\it commands}
\par
}$


cd [dir] $\textstyle \parbox{12.5cm}{%
без аргументов переходит в домашний (основной) кат...
...ателя. С
аргументом - меняет текущий рабочий каталог на {\it dir}.
\index{cd}
}$


command $\textstyle \parbox{12.5cm}{%
\hbox to 3cm{ {\tt\bf command} {\it [options] comm...
...манду: из каталога или
из внутренней таблицы оболочки.
\par
\end{itemize}\par
}$


continue $\textstyle \parbox{12.5cm}{%
\hbox to 3cm{ {\tt\bf continue} {\it [n] } }
\inde...
... параметр, то происходит переход к
началу {\it n-1} охватывающего цикла.
\par
}$


declare $\textstyle \parbox{12.5cm}{%
\hbox to 3cm{ {\tt\bf declare} {\it [options] [nam...
...тка сменить статус переменной объявленной с атрибутом ''только
чтение''.
\par
}$


dirs $\textstyle \parbox{12.5cm}{%
\hbox to 3cm{ {\tt\bf dirs} {\it [options] } }
\in...
...е имя начиная с конца;
\item [l] напечатать всю информацию.
\end{itemize}\par
}$

echo$\textstyle \parbox{14cm}{%
%
\hbox to 3cm{{\tt\bf echo} {\it [options][string]...
...C}nnn}] символ ASCII, восьмеричный код которого равен
{\it nnn}.
\end{itemize}}$

enable$\textstyle \parbox{14cm}{%
%
\hbox to 3cm{{\tt\bf enable} {\it [options][built...
...еми же именами, которые имеют внутренние команды оболочки
{\tt\bf bash}.
\par
}$

eval$\textstyle \parbox{14cm}{%
%
\hbox to 3cm{{\tt\bf eval} {\it [command args...]...
... команды {\bf command}. Если команда не найдена, то код
завершения равен 127.
}$

exec$\textstyle \parbox{14cm}{%
%
\hbox to 3cm{{\tt\bf exec} {\it [[-] command [arg...
...] переназначить стандартный ввод на файл
{\it
input\_file}.
\end{itemize}\par
}$

exit$\textstyle \parbox{14cm}{%
%
\hbox to 2cm{{\tt\bf exit} {\it [n]}}%\index{ex...
...удет установлен равным коду завершения
последней команды внутри скрипта.
\par
}$

export$\textstyle \parbox{14cm}{%
%
\hbox to 6cm{{\tt\bf export} {\it [options][VariableNames]}}%}$
 $\textstyle \parbox{14cm}{%
%
\hbox to 8cm{{\tt\bf export} {\it [options][Varia...
... список переменных экспортированных
данной
оболочкой.
\end{description}
\par
}$

fc [options][first][last]

fc -s [old=new][command]

отобразить или отредактировать команды в сохран©нном списке команд, выданных в данной сессии.

Параметры:

-e
следующий параметр есть имя редактора для редактирования строки: по умолчанию имя редактора содержится в переменной окружения FCEDIT; если переменная не определена, то используется═vi;
-l
показать сохран©нный список команд;
-n
не показывать номера команд в отображаемом списке;
-r
показать сохран©нный список команд в обратном порядке;
-s
old=new
заменить подстроку old на подстроку new в команде command и выполнить команду.

Примеры:

fc -l -5 - показать пять последних команд;

fc -l 520 530 - показать команды, начиная с номера 520 до номера 530;

fc -s k9q=orion telnet - заменить k9q на orion в ранее выданной команде telnet;

fc -e pico -15 - с помощью редактора pico отредактировать 15-ую команду от конца списка команд и выполнить е© по завершении редактирования;

=2cm fg [jobIDs]
перевести текущее задание или задание с номером jobID из режима фоновой задачи в режим задачи переднего плана. Полезно смотреть раздел "Управление заданиями".

=2cm for x [in list]
do
commands
done
присвоить последовательно каждое слово в списке list переменной x и выполнить команды commands для каждого значения x. Если список list опущен, то предполагается использование списка позиционных параметров $@.

Примеры:

for user in w -h | awk '{print($1)}' | sort | uniq

do

finger $user

done

Привед©нный выше скрипт показывает информацию о логированных пользователях в системе.

Обратите внимание, что do стоит во второй строке. Если do будет в той строке что и for то надо ставить точку с запятой перед do.

=2cm function name(){list}
определяет функцию с именем name. Последовательность команд оболочки list, которая составляет тело функции, может использовать значения позиционных параметров функции также как и в обычном скрипте ($1, $2, etc.). Тело функции ограничивается: в начале - фигурной открывающей скобкой "{" и закрывающей фигурной скобкой "}" в конце.

=2cm getopts optstring name [args]
используется процедурами оболочки, чтобы разделить позиционные параметры и аргументы. Обычно применение - внутри скрипта для анализа параметров скрипта. Строка optstring содержит распознаваемые параметры, обозначаемые одним символом. Если за символом следует двоеточие, то данный параметр требует аргумент, который должен быть отделен от параметра одним пробелом. Например, если optstring='ax:b', то возможно использование тр©х параметров: a, x и b, прич©м параметр x требует аргумент. При каждом вызове getopts помещает значение параметра в переменную окружения с именем name, инициализируя переменную, если е© нет, а═ индекс следующего аргумента будет помещен в переменную окружения OPTIND. OPTIND устанавливается в 1 каждый раз, когда вызывается оболочка или скрипт. Когда параметр требует аргумент, getopts помещает этот аргумент в переменную OPTARG. Оболочка не переустанавливает OPTIND автоматически. Иными словами, если имеет место многократный вызов getopts в одном скрипте, то необходимо побеспокоиться об установке OPTIND в начальное значение. В качестве примера рассмотрим простой скрипт.

#!/bin/bash
echo 0=$0 1=$1 2=$2 3=$3 4=$4
while getopts ax:b NAME;do
echo OPT=$NAME  OPTIND=$OPTIND  OPTARG=$OPTARG CC=$?
done
В ответ на вызов этого скрипта ./G -a -b -x будет напечатано следующее.
16:49:20>bash>pcfarm>./G -a -b -x
0=./G 1=-a 2=-b 3=-x 4=
OPT=a OPTIND=2 OPTARG= CC=0
OPT=b OPTIND=3 OPTARG= CC=0
./G: option requires an argument -- x
OPT=? OPTIND=4 OPTARG= CC=0
А в ответ на другую строку ./G -a -b -x FileName получим:
16:51:33>bash>pcfarm>./G -a -b -x FileName
0=./G 1=-a 2=-b 3=-x 4=FileName
OPT=a OPTIND=2 OPTARG= CC=0
OPT=b OPTIND=3 OPTARG= CC=0
OPT=x OPTIND=5 OPTARG=FileName CC=0

=2cmhash [-r][commands]
произвести поиск команд, указанных в аргументе и запомнить оглавление, в котором находится каждая команда. Хеширование приводит к тому, что оболочка запоминает связь между именем команды, указанной в аргументе, и абсолютным именем каталога, в котором содержится данное имя. Таким образом, будущее использование команды уже не будет требовать никакого поиска по каталогам.
Без аргументов, команда hash печатает на экране список команд, уже содержащихся во внутренней таблице оболочки. При печати указывается, сколько раз использовалась каждая команда из списка. Если указан параметр -r, то удаляется соответствующая запись из таблицы или все записи (если опущен параметр commands).

<
help [string] печатает информацию о встроенных командах оболочки, имя которых начинается на string. Например, команда help h выдаст на экран следующее:

hash: hash [-r] [name ...]
    For each NAME, the full pathname of the command is determined and
    remembered.  The -r option causes the shell to forget all remembered
    locations.  If no arguments are given, information about remembered
    commands is presented.
help: help [pattern ...]
    Display helpful information about builtin commands.  If PATTERN is
    specified, gives detailed help on all commands matching PATTERN,
    otherwise a list of the builtins is printed.
history: history [n] [ [-awrn] [filename]]
    Display the history list with line numbers.  Lines listed with
    with a `*' have been modified.  Argument of N says to list only
    the last N lines.  Argument `-w' means to write out the current
    history file;  `-r' means to read it instead.  Argument `-a' means
    to append history lines from this session to the history file.
    Argument `-n' means to read all history lines not already read
    from the history file.  If FILENAME is given, then use that file,
    else if $HISTFILE has a value, use that, else use ~/.bash_history.

<
history [options] печатает нумерованный список команд, выданных в текущей и/или прошлой сессий.

Если указан параметр lines, то отображаются последние lines строк.

Параметры:

-a
оболочка bash поддерживает файл с именем .bash_history в домашнем пользовательском каталоге. Данный параметр заставляет оболочку добавить в файл .bash_history список команд, выданных в текущей сессии до команды history.
-n
добавить в список команд те, что еще не были прочитаны из файла .bash_history.
-r
использовать файл .bash_history как список выданных команд вместо текущего рабочего списка.
-w
записать в файл .bash_history текущий список выданных команд (замещая предыдущее содержание файла).

=2cmif test-cmd
начинает условный оператор. Команда имеет следующие форматы:
$\textstyle \parbox{3cm}{%
if test-cmd\\
then\\
cmd1\\
fi
}$$\textstyle \parbox{3cm}{%
if test-cmd1\\
then\\
command1\\
else\\
command2\\
fi\\
}$$\textstyle \parbox{3cm}{%
if test-cmd\\
then\\
command1\\
elif test-cmd2\\
then\\
command2\\
....\\
else\\
commmandN\\
fi
\par
}$

<
jobs [options][jobIDs]

<
jobs -x command [args]

печатает список всех заданий (выполняющихся или остановленных) или заданий, которые определяются параметром jobIDs.
Параметры:
-l
перечисляет ID процессов в дополнение к обычной информации;
-p
перечисляет только ID процессов руководителя группы;

-n
перечисляет только задания с момента последнего уведомления;

Если указан параметр -x, команда jobs замещает любой идентификатор задания, найденный в аргументах command, или args, соответствующим групповым идентификатором процесса и выполняет команду command, передавая ей аргументы args.

<
kill [options] IDs

оборвать все процессы специфицированные в ID. Вы должны быть владельцем процесса или привилегированным пользователем.
Параметры:

-signal номер сигнала или имя сигнала (можно получить с помощью команды " kill -l"

- означает, что дальнейшая информация является аргументами, а не параметрами;

-l перечислить имена сигналов;
-s signal определить сигнал, может быть имя сигнала.

=2cm=1letexpressions
выполнить арифметические операции над целыми выражениями. expressions состоит из целых чисел, операторов и имен переменных окружения, которые не нуждаются в предшествующем знаке $). Выражения должны быть заключены в кавычки, если они содержат пробелы или другие специальные символы.
Примеры:
let k=k+1
let "k = k + 1"
В обоих примерах переменная k увеличивается на 1.

=2cm=1logout
Выход из оболочки. Может быть использована, если планируется выход из оболочки для логирования. В противном случае следует использовать команду exit.

=2cm=1popd[options]
управление стеком каталогов оболочки. По умолчанию, удаляется самый верхний каталог и производится переход в него.
Options:
=2cm=1 +n - удалить n-ый каталог из стека, начиная счет с вершины стека с 0.
=2cm=1 -n - удалить n-ый каталог из стека, начиная счет снизу стека с 0.

=2cm=2pushddirectory
pushd[options]
в первом варианте добавляет каталог в вершину стека каталогов и делает его текущим каталогом.
Во втором варианте, если параметры опущены, то меняются местами два верхних каталога стека каталогов. Если задано +n, то n-ый каталог от вершины из стека каталогов становится самым верхним. Если задано -n, то верхним каталогом становится n-ый каталог от дна стека каталогов.

=2cm=1pwd
напечатать абсолютное имя текущего каталога. Если командой set установлен параметр -p, то команда pwd не будет печатать имя символической ссылки.

=2cm=1read[options] var1 [var2 ...]
читается одна строка из стандартного ввода. Каждое слово из введенной строки присваивается переменной var1, var2, ... Если переменные исчерпаны, то остаток строки присваивается последней переменной. Если переменная одна, то ей присваивается вся строка. Если переменных нет, то строка присваивается переменной окружения REPLY.
Options:
-r игнорировать обратный слеш как символ продолжения строки.

=2cm=1readonly[options] var1 [var2 ...]
предотвратить изменение значений специфицированных переменных (присвоить атрибут "только чтение").
Options:

-
рассматривать последующие данные как аргумент, а не опцию;
-f
[name(s)] обозначает функцию;
-p
напечатать все имена переменных с атрибутом "только чтение".

=2cm=1return[n]
используется внутри определения функции. Выйти из функции с кодом завершения n. Если n опущено, то код завершения равен коду завершения команды, выполненной перед return.

=2cm=1selectname [in wordlist;]
do
commands
done
выбрать значение для имени name среди значений в wordlist. При выполнении команды на экране печатаются нумерованный список значений из wordlist. Когда оператор вводит номер значения, то выполняется последовательность команд commands, затем снова производится выбор нового значения, если только последовательность commands не содержит команд break или return или exit.

set [options][arg1 arg2 ...]

без параметров команда set печатает значения всех переменных окружения, известных в текущей оболочке. Параметры могут быть разрешены (-options) или запрещены (+options). Параметры могут быть установлены при вызове оболочки, т.е. при вызове программы bash. Аргументы присваиваются в естественном порядке: первый аргумент присваивается $1, второй - $2 и т.д.

Параметры:

- выключить -v и -x; остальную информацию в строке рассматривать как аргументы;

- используется как признак конца опций; оставшуюся часть строки рассматривать как аргументы;

-a отметить переменные, которые будут автоматически экспортированы после присваивания им значений;

-b печатать состояние фонового задания в момент окончания, не ожидая очередного приглашения оболочки;

-e немедленно завершить выполнение оболочки, если любая команда закончилась с ненулевым кодом завершения;

-f запретить генерацию расширения имен файлов (установить режим noglobbing);

-h определить расположение и запомнить функциональные команды сразу, как только определены функции;

-k присваивание параметров переменным окружения будут происходить вне зависимости от их местоположения в командной строке; обычно аргументы должны предшествовать имени команды;

-l когда команда for использует переменную окружения, которая уже используется в данном скрипте, то после выхода из цикла for переменная будет иметь то значение, которое она имела до входа в цикл for. В противном случае (если не установлено set -l) по выходе из цикла переменная, использованная в цикле for, будет иметь значение последней величины присвоенной в цикле;

-m установить режим мониторирования. Разрешает управление заданиями, фоновые задания выполняются в отдельной группе процессов. Обычно этот режим устанавливается автоматически;

-n оболочка читает команды, проверяет их, но не исполняет команды: удобно для проверки скриптов (команда, естественно, должна быть внутри скрипта);

-o напечатать установленные режимы. Многие режимы могут быть установлены различными способами (не только командой set). Названия режимов:

monitor
то же, что set -m
noclobber
то же, что set -C
noexec
то же, что set -n
noglob
то же, что set -f
notify
то же, что set -b
nounset
то же, что set -u
physical
то же, что set -P
posix
то же, что "удовлетворяет стандарту POSIX";
privileged
то же, что set -p
verbose
то же, что set -v
vi
то же, что "использовать стиль редактирования vi";
xtrace
то же, что set -x

-p начать как привилегированный пользователь: не обрабатывать $HOME/.profile;

-t выйти как только будет выполнена одна команда;

-u при подстановках рассматривать использование неинициализированных переменных (переменные, которым не присвоено никаких значений) как ошибку;

-v показать каждую команду скрипта, когда она прочитывается;

-x показать команды и аргументы в тот момент, когда они выполняются;

-C то же самое, что noclobber;

-H это умолчание; разрешить команды "!" и "!!";

-P напечатать абсолютное имя текущего каталога в ответ на команду pwd.

<

=2cm=1shift [n]
без параметорв -- сдвинуть позиционные параметры (параметр $2 становится $1 и так далее). Если дан параметр n, то производится сдвиг на n позиций.

=2cm=1source file [arguments]
читать и выполнить строки из файла file. При этом файл file не обязан быть исполняемым, но должен находиться в группе каталогов, где производится поиск исполняемых модулей (переменная PATH).

=2cm=1suspend [-f]
то же самое, что CTRL-Z. Часто используется, чтобы приостановить команду su. Параметр -f заставляет приостановить работу оболочку, даже если это оболочка, которая начала работать сразу после процесса login.

=2cm=1test condition
вычислить условие и, если условие верно, вернуть нулевой код завершения. В противном случае, вернуть ненулевой код завершения. Альтернативная форма определения условия заключается в использовании квадратных скобок вместо слова test. Выражения, которые могут использоваться для вычисления условий, перечислены ниже.

Проверка состояния файла(ов)

[-b file] -- file существует и является специальным блоковым файлом.

[-c file] -- file существует и является специальным символьным файлом.

[-d file] -- file существует и является каталогом.

[-f file] -- file существует и является обычным регулярным файлом.

[-g file] -- file существует и имеет установленный бит mboxset-group-id.

[-k file] -- file существует и имеет установленным бит sticky.

[-p file] -- file существует и является именованным программным каналом (named pipe) с доступом FIFO.

[-r file] -- file существует и разрешен для чтения.

[-s file] -- file существует и имеет размер в байтах больше нуля.

[-t n] -- открытый описатель файла n связан с терминальным устройством; по умолчанию, n=1.

[-u file] -- file существует и имеет установленный бит set-user-id.

[-w file] -- file существует и разрешена запись в файл.

[-x file] -- file существует и является исполняемым файлом.

[-G file] -- file существует и его группа является эффективной группой процесса.

[-L file] -- file существует и является символической ссылкой.

[-O file] -- file существует и его владелец ?

[-S file] -- file существует и является сокетом.

[fA -ef fB] -- файлы fA и fB существуют и связаны между собой (иначе, это один и тот же файл).

[fA -nt fB] -- файл fA новее, чем fB.

[fA -ot fB] -- файл fA старее, чем fB.

Сравнения строк

[-n sA] -- строка sA имеет НЕнулевую длину.

[-z sA] -- строка sA имеет нулевую длину.

[sA = SB] -- строка sA равна строке sB.

[sA != SB] -- строка sA НЕ равна строке sB.

[string] -- строка string не пуста.

Сравнения целых чисел

[n1 -eq n2] -- n1 равно n2.

[n1 -qe n2] -- n1 больше или равно n2.

[n1 -gt n2] -- n1 больше n2.

[n1 -le n2] -- n1 меньше или равно n2.

[n1 -lt n2] -- n1 меньше n2.

[n1 -ne n2] -- n1 НЕ равно n2.

Комбинации

[!condition] -- верно, если условие condition ложно.

[C1 -a C2] -- верно, если условия C1 и C2 верны одновременно (логический "И").

[C1 -a C2] -- верно, если хотя бы одно условий C1 или C2 верно (логический "ИЛИ").

Замечание: при построении логических выражений могут использоваться более, чем два условия.

=2cm=1times
напечатать время процессора, потребленное пользователем и системой в данной сессии.

=2cm=1trap [-l] [[commands] signals]
выполнить команды commands, если получены любые сигналы signals. Общие сигналы включают сигналы с номерами 0, 1, 2 и 15. Несколько команд на месте commands должны быть объединены в группу и разделены точкой с запятой. Если commands представляет собой пустую строку, например, (trap "" signals), тогда сигналы signals будут игнорироваться данной оболочкой. Если команды commands полностью опущены, то обработка сигналов signals будет возвращена к стандартному значению. Если все параметры commands и signals опущены, то будут выведены текущие установки. Если указан параметр -l, то будет отпечатан полный список сигналов.

Какие бывают сигналы

0
выход из оболочки (обычно когда оболочка завершается);
1
hangup (обычно logout);
2
прерывание (обычно CTRL-c);
3
Quit;
4
Неверная машинная команда (illegal instruction);
5
трассировка (trace trap);
6
аварийное завершение (abort);
7
не используется;
8
исключительная ситуация при операциях с═плавающей точкой; (floating point exeption);
9
завершение (termination);
10
определяется пользователем;
11
неправильная адресация памяти;
12
определяется пользователем;
13
запись в программный канал, который никто не читает;
14
аварийный сигнал по timeout;
15
завершение программы (обычно по команде kill);
16
ошибка в стеке сопроцессора (coprocessor stack fault);
17
завершение процесса-наследника (termination of child process);
18
продолжение после остановки;
19
остановить процесс (stop process);
20
остановка вывода на терминал;
21
фоновый процесс имеет ввод с терминала;
22
фоновый процесс имеет вывод на терминал;
23
ошибка ввода-вывода;
24
временной лимит процессора превышен;
25
лимит размера файла превышен;
26
27
Profile;
28
изменение размера окна;

Примеры

trap "" 2
-- игнорировать сигнал 2 (прерывание);

trap 2
-- восстановить стандартную реакцию на сигнал 2;

trap "rm -f tmp; exit" 0 1 2
-- удалить файл tmp в случае поступления сигналов 0, 1 или 2.

=2cm=1type [options] commands
напечатать тип ключевых слов: является ли ключевое слово именем программы (скрипта), или ключевым словом, используемым оболочкой, или встроенной командой оболочки, или это неопознанная комбинация символов.

-
-- рассматривать все последующее как аргументы, а не как параметры;
-a
-- напечатать все варианты команд commands, а не только тот, который будет вызываться;
-p
-- напечатать значения команд commands, которые находятся во внутреннем кэше оболочки;
-t
-- определить состояние команд commands: являются ли они псевдонимами, ключевыми словами, встроенной функцией или файлом.

Пример

Здесь мы хотим узнать какой тип имеют команды trap, while, LoadFarm и htpl. Мы сделаем это командой:
type trap while LoadFarm htpl
В ответ, оболочка bash напечатала:

trap is a shell builtin
while is a shell keyword
LoadFarm is /home/shevel/bin/LoadFarm
type: htpl: not found

Как видим, оболочка сообщила, что trap есть встроенная команда оболочки, while есть ключевое слово оболочки, а LoadFarm -- это программа или скрипт, а htpl -- не найдено.


=2cm=1typeset
смотрите declare.


=2cm=1ulimit [options] [n]
если опущено n, тo напечатать одно или более ограничений на используемые ресурсы (если ресурс не имеет явных ограничений, то это не значит, что он может быть любым). Если определен параметр n, то присвоить соответствующему ограничению на ресурс значение n. Ресурсы могут быть жесткими (-H) и мягкими (-S). По умолчанию, ulimit устанавливает оба лимита, а печатает мягкий лимит. Параметры определяют какие лимиты используются:
Значения параметров:
-
-- далее следуют аргументы, а не параметры;
-a
-- напечатать все текущие лимиты;
-H
-- напечатать жесткие лимиты;
-S
-- напечатать мягкие лимиты;
-c
-- core файлы;
-d
-- размер сегмента данных процесса;
-f
-- размер файлов образованных оболочкой;
-m
-- размер резидентного набора;
-n
-- количество описателей файлов;
-P
-- размер программного канала;
-s
-- размер стека;
-t
-- количество времени CPU в секундах;
-u
-- количество процессов на пользователя;
-v
-- виртуальная память используемая оболочкой.


=2cm=1unset [-f] [-v] [name ...]
Для каждого имени name удалить соответствующую переменную или функцию. Если задан параметр -v, то команда unset будет влиять только на переменные (а не функции). Если указан параметр -f, то unset будет действовать лишь на функции (а не переменные). Если параметры (флаги) не указаны, то unset сначала пытается воздействовать на переменные, а уже потом на функции. Некоторые переменные, например, PATH или IFS не могут быть удалены (см. атрибут readonly).


=2cm=1wait [ID]
пауза в выполнении до тех пор, пока определ©нный процесс с номером ID или задание с номером ID будут завершены. Если параметр опущен, то ожидается завершение выполнения всех фоновых заданий. Переменная окружения $! содержит номер фонового процесса, который был запущен последним. Если не включена возможность управления заданиями, то параметр ID может обозначать только номер процесса. Смотрите раздел "Управление заданиями". Пример:
StartPar &
wait $!
ожидать завершения фонового процесса, который выполняет скрипт StartPar.


=2cm=1while CONDITION; do COMMANDS; done
Сделать все подстановки в последовательности команд COMMANDS и повторять выполнение этой последовательности до тех пор, пока условие CONDITION не примет значение false (неверно).


next up previous contents
Next: 6.6 zsh Up: 6. Оболочки Previous: 6.4 Сравнительные характеристики оболочек
Andrei Chevel
Andrei.Chevel@pnpi.spb.ru