среда, 10 июня 2009 г.

Bash bases.

6.3.1 Общее

![numb] — запуск строки из истории (history);
!str — запуск ближайшей строки соответствующей маске str из истории (history);
\ — продолжение текущей строки на другой строке или экранирование специального символа после данного символа (\$);
; — разделитель команд;
() — выполнения сценария в скобках в другой подоболочке;
(()) — включение выражений с «С» синтаксисом;
[] — включение условных операций с синтаксисом команды test;
“pwd” — определение строки с разрешением подстановки значений переменных;
'pwd' — определение строки с запрещением подстановки значений переменных;
`pwd` — результат выполнения команды pwd;
$(x) — выполнение команды x и возврат результата (подобно `x`);
x=pwd — определение переменной окружения x и присвоение ей строки pwd;
x='34' — определение переменной окружения x и присвоение ей строки '34';
x[2]=pwd — определение массива x и присвоение его элементу 2 строки pwd;
x=(zero one two three) — определение массива x и заполнение четырех его элементов;
x=([0]=zero [3]=three [2]=two [1]=one) — определение массива x и заполнение четырех его элементов по выбору;
$(( 100/3 )), $[100/3] — выполнение простых целочисленных операций.

Примеры:
a=4; echo $[a=$a+4] $[a+=4] $[a=a+4]
a=4; echo $[a=$a+4, a+=4, a=a+4]
$[2!=2] $[2!=3]
$[a=2<3] $a
Операции:
id++, id-- — постфиксное увеличение/уменьшение значения переменной на 1
++id, --id — префиксное увеличение/уменьшение значения переменной на 1
-, + — унарные минус и плюс
!, ~ — логическое и побитовое отрицание
** — возведение в степень
*, /, % — умножение, деление, получение остатка от деления
+, - — сложение, вычитание
< <, > > — побитовый сдвиг влево и вправо
<=, >=, <, > — сравнение
==, != — равенство и неравенство
& — побитовое И
^ — побитовое исключающее ИЛИ НЕ a^b – это а или с… но не в
| — побитовое ИЛИ
&& — логическое И
|| — логическое ИЛИ
выр1?выр2:выр3 — условное вычисление
=, *=, /=, %=, +=, ?=+ — присваивание
выр1,выр2 — запятая
() — выделение более приоритетного участка выражения

$x, ${x} — подстановка значения переменной/параметра x
${!x} — косвенная подстановка значения переменной/параметра указанного в x;
${#x} — косвенная подстановка значения переменной/параметра указанного в x,

если параметр – * или @, подставляется количество позиционных параметров,
если параметр – массив с индексом * или @, подставляется количество элементов массива;

${x:?»Error, no bar»} — генерировать ошибку если x не определена или равна нулю;
${x?»Error, no bar»} — -//-;
${x:="foose"} — присвоить значение по умолчанию если x не определена или равна нулю;
${x="foose"} — -//-;
${x:offset:lenght}, ${x:offset} — возвращает часть от x начиная с offset длиной lenght;

В качестве длины и смещения могут выступать:

  • арифметические выражения;
  • смещение отрицательное число – отсчитывается с конца значения параметра;
  • параметр – @, результат – позиционных параметров, начиная с параметра ;
  • параметр – массив с индексом @ или *, результат – элементов массива, начиная с ${параметр[m]};

${x:+"foose"} — если переменная определена то вместо неё используется “foose”;
${x+"foose"} — -//-;
${x:-"foose"} — если переменная определена то она используется иначе используется “foose”;
${x-"foose"} — -//-;
${пар#шабл} — ??
${пар##шабл} — ??
${пар%шабл} — ??
${пар% %шабл} — ??
${пар/шабл/стр} — заменяется первая, самая длинная подстрока значения параметра, на указанную строку;
${пар/ /шабл/стр} — заменяются все самые длинные подстроки значения параметра, на указанную строку;
${array[@]} — обращение сразу ко всему массиву;
$'\n' — вставка управляющего символа в строку;
Comm && — выполняет действие после выражения если команда неудачна;
Comm || — выполняет действие после выражения если команда удачна;
MYVAR#*fo — отсекает от начала переменной MYVAR самую короткую часть удовлетворяющую маске *fo;
MYVAR##*fo — отсекает от начала переменной MYVAR самую длинную часть удовлетворяющую маске *fo;
MYVAR%fo* — отсекает от конца переменной MYVAR самую короткую часть удовлетворяющую маске fo*;
MYVAR% %fo* — отсекает от конца переменной MYVAR самую длинную часть удовлетворяющую маске fo*;
MYVAR:2:5 — возвращает часть строки MYVAR которая начинается с 2 символа и заканчивается 5;

6.3.2 Служебные переменные языка

$# — количество фактических аргументов;
$- — флаги (однобуквенные), указанные при запуске shell или установленные посредством set.
$? — код возврата последней команды;
$$, $PPID — PID текущего процесса (скрипта);
$! — PID последнего запущенного фонового процесса;
$* — раскрывает единственное слово, содержащее список всех позиционных парам;
$@ — ссылка на все аргументы команды отделенные пробелами;
$0 — имя команды в командной строке;
$n, ${n} — аргумент n командной строки (n = 1...);

6.3.3 Основные переменные окружения оболочки

PWD — текущий рабочий каталог;
UID — цифровой идентификатор текущего пользователя;
umask — содержит маску прав доступа по которой создаются новые файлы;
BASH — полный путь вызова BASH;
BASH_VERSION — версия данного экземпляра BASH;
EDITOR — содержит имя редактора используемого для редактирования некоторых конфигурационных файлов;
PAGER — содержит имя программы для отображения информационных страниц (типа more);
SHLVL — количество запущенных BASH;
REPLY — содержит последнюю строку ввода;
RANDOM — содержит случайное число в диапазоне 0..32767;
SECONDS — время в секундах от запуска BASH;
HISTCMD — номер текущей команды в истории;
IFS — цепочка символов разделителей полей;
PATH — пути поиска команд;
HOME — домашний каталог текущего пользователя;
MAIL — имя файла в который поступает электронная почта;
LOGNAME — имя пользователя использованное для входа в систему;
SHELL — имя интерпретатора команд;
LD_LIBRARY_PATH — описания пользовательских путей к динамическим библиотекам;
DISPLAY — описывает адрес дисплея для X-приложений;
LANG — переменная локали;
TERM — тип пользовательского терминала;
INPUTRC — содержит имя файла параметров для библиотеки readline, определяющей параметры ввода с клавиатуры;
PS1,PS2 — описывает вид приглашения в командной строке;
TZ — информация о часовом поясе;
MALLOC_CHECK_ — указывает что делать с ошибками в функциях malloc, free:

= 0 — молча игнорировать все ошибки;
= 1 — сообщить об ошибке и продолжить работу;
= 2 — прервать (без сообщения);
= 3 — прервать и сообщить об ошибке.

MALLOC_TRACE — определяет путь для команды mtrace и функции в программе mtrace;

6.3.4 Основные операторы

& — выполнить команду до него в фоновом режиме;
if [ Condition ] — условный оператор ( if ( Condition ) – tch);
then — тело выполнения условия;
else — тело невыполнение условия;
elif [ Condition ] — совмещенная команда else if;
fi — окончание условного оператора;
for x in 1 2 3 4 — оператор цикла, в x перебираются значения за in ( foreach x (1 2 3 4) – tch ). Общая структура циклов:

for x in 1 2 3 4

do #тело цикла

done

while [ Condition ] — выполняет цикл пока верно условие Condition ( while ( Condition ) -tch );
until [ Condition ] — выполняет цикл до равенства условия Condition;
(repeat x expression – tch ) — выполняет повторение выражения x раз;
select x in list; — запрашивает выбор из списка и присваивает выбранное значение переменной ;
do — начало тела цикла определенного for, while, until;
done — конец тела цикла определенного for, while, until;
break — завершение цикла;
continue — продолжение цикла сначала;
case x in — команда выбора. Имеет структуру:

case "${x##*.}" in
gz) gzunpack ${SROOT}/${x} ;;
bz2) bz2unpack ${SROOT}/${x} ;;
*) echo «Неизвестный формат архива» exit ;;
esac

function func() { } — определяет функцию с именем func;
func a1 a2 a3 — вызов функции;

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

. file — выполнить все команды в файле после точки;
eval [attr] — выполнить команду заданную аргументами;
exec [prog] — сменить программу текущего процесса указанной, т.е. выполнить в данном процессе новую программу;
exit n — выход из сценария с кодом ;
shift [n] — сдвиг параметров командной строки на единицу (для доступа к параметрам с номером > 9 );
cd [dir] — сменить директорию;
pwd — получение имени текущей директории;
read x y — ввод строки из двух слов;
set x = str — инициализация переменной и установка различный настроек интерпретатора;
-A Name_A 1 2 3 4 5 — инициализация массива;
-V,-X — включение отладочного режима;
+V,+X — выключение отладочного режима;
unset x — отмена инициализации переменной;
export x — создает переменную окружения x и экспортирование её в систему;
-p — вывод всех экспортированных переменных.
local x — создает локальную переменную окружения которая не перекрывает глобальной (часто используется для функций);
declare — декларирование переменных и изменение их атрибутов;
trap — установка обработчиков сигналов в скрипте;
alias [имя=синоним] — создание псевдонимов или альтернативных имен команд;
unalias — удаление псевдонима;
test — проверка условий, используется в циклах;
getopts — разбор опций.

6.3.6 Операторы сравнения файлов

-e — существует;
-d — каталог;
-f — обычный файл;
-c — специальный файл;
-b — специальный блочный файл;
-p — специальный файл именованного канала;
-L — символическая ссылка;
-r — для чтения;
-w — для записи;
-x — исполняемый;
-z — файл пуст;
-s,(-z) — имя файла не нулевой длины;
(-o) — пользователь является владельцем файла;
fname1 -nt fname2 — fname1 новее fname2;
fname1 -ot fname2 — fname1 старше fname2;

6.3.7 Операторы сравнения цепочек символов, арифметических выражений и логические операторы

-z — строка пуста;
-n — строка не пуста;
=, (==) — строки равны;
!= — строки неравна;
-eq — равно;
-ne — неравно;
-lt,(< ) — меньше;
-le,(<=) — меньше или равно;
-gt,(>) — больше;
-ge,(>=) — больше или равно;
! — отрицание логического выражения;
-a,(&&) — логическое «И»;
-o,(||) — логическое «ИЛИ»

6.3.8 Перенаправления вывода

| — перенаправление вывода в канал;
< file — file записать в STDIN;
> file — STDOUT записать в file;
<> file — чтение и запись в файл;
>> file — STDOUT добавить в file;
<< str — определяет слово как признак окончания ввода;
2> file — STDERR записать в file (могут указываться дескрипторы других файлов);
1>&2 — STDOUT записать в STDERR;
2>&1 — STDERR записать в STDOUT;
&> file — STDOUT и STDERR записать в file;

6.3.9 Специальные символы (экранирование)

\n — новая строка
\b — возврат на один символ
\c — печать строки без символа новой строки
\f — переход к новой странице/экрану
\r — возврат каретки
\t — табуляция
\v — табуляция по вертикали
\\ — обратная косая черта
0nnn — восьмеричное число
xNN — шестнадцатеричное число

6.3.10 Маски (подстановка, может быть отключена опцией -f или set)

* — производная цепочка символов;
? — производный символ;
[...] — символ в скобках [A-Z]; "! и ^" – исключение символа.

6.3.11 Представление численных значений

045 — восьмеричное число (начинается с 0)
0x45, 0X32 — шестнадцатеричное число
[основание#]n — число с основанием (по умолчанию основание 10)

Примеры:
$[2#101] $[10#101] $[16#101]
$[16#FF] $[16#ff] $[0xFF]
$[64**2] $[64#@@]
$[64#z] $[64#Z]

Комментариев нет: