1 сентября 2011 г.

bash: специальные параметры

Специальные параметры

Параметр    Правила замены

*    Заменяется позиционными параметрами, начиная с первого. Если замена производится внутри двойных кавычек, то этот параметр заменяется на одно единственное слово, составленное из всех позиционных параметров, разделенных первым символом специальной переменной IFS (о ней будет сказано ниже). То есть ``$*'' эквивалентно ``$1c$2c...'', где c - первый символ в значении переменной IFS. Если IFS присвоено пустое значение или ее значение не установлено, параметры разделяются пробелами

@    Заменяется позиционными параметрами, начиная с первого. Если замена производится внутри двойных кавычек, то каждый параметр заменяется отдельным словом. Так, ''$@'' эквивалентно ''$1'' ''$2'' ... Если позиционных параметров нет, то значение не присваивается (параметр @ просто удаляется)

#    Заменяется десятичным значением числа позиционных параметров

?    Заменяется статусом выхода последнего из выполнявшихся на переднем плане программных каналов

-(дефис)    Заменяется текущим набором значений флагов, установленных с помощью встроенной команды set или при запуске самой оболочки

$    Заменяется идентификатором процесса (PID) оболочки

!    Заменяется идентификатором процесса (PID) последней из выполняющихся фоновых (асинхронно выполнявшихся) команд

0    Заменяется именем оболочки или запускаемого скрипта. Если bash запускается для выполнения командного файла, $0 равно имени этого файла. В противном случае это значение равно полному пути к оболочке

bash: условные выражения

# -a file
Верно, если файл с именем file существует.

# -b file
Верно, если file существует и является специальным файлом блочного устройства.

# -c file
Верно, если file существует и является специальным файлом символьного устройства.

# -d file
Верно, если file существует и является каталогом.

# -e file
Верно, если файл с именем file существует.

# -f file
Верно, если файл с именем file существует и является обычным файлом.

# -g file
Верно, если файл с именем file существует и для него установлен бит смены группы.

# -h file или -L file
Верно, если файл с именем file существует и является символической ссылкой.

# -k file
Верно, если файл с именем file существует и для него установлен "sticky'' bit.

# -p file
Верно, если файл с именем file существует и является именованным каналом (FIFO).

# -r file
Верно, если файл с именем file существует и для него установлено право на чтение

# -s file
Верно, если файл с именем file существует и его размер больше нуля.

# -t fd
Верно, если дескриптор файла fd открыт и указывает на терминал.

# -u file
Верно, если файл с именем file существует и для него установлен бит смены пользователя.

# -w file
Верно, если файл с именем file существует и для него установлено право на запись.

# -x file
Верно, если файл с именем file существует и является исполняемым.

# -O file
Верно, если файл с именем file существует и его владельцем является пользователь, на которого указывает эффективный идентификатор пользователя.

# -G file
Верно, если файл с именем file существует и принадлежит группе, определяемой эффективным идентификатором группы.

# -S file
Верно, если файл с именем file существует и является сокетом.

# -N file
Верно, если файл с именем file существует и изменялся с тех пор, как был последний раз прочитан.

# file1 -nt file2
Верно, если файл file1 имеет более позднее время модификации, чем file2.

# file1 -ot file2
Верно, если файл file1 старше, чем file2.

# file1 -ef file2
Верно, если файлы file1 и file2 имеют одинаковые номера устройств и индексных дескрипторов (inode).

# -o optname
Верно, если задействована опция оболочки optname. Пояснения см. на странице man bash.

# -z string
Верно, если длина строки равна нулю.

# -n string
Верно, если длина строки не равна нулю.

# string1 == string2
Верно, если строки совпадают. Вместо == может использоваться =.

# string1 !== string2
Верно, если строки не совпадают.

# string1 < string2
Верно, если строка string1 лексикографически предшествует строке string2 (для текущей локали).

# string1 > string2
Верно, если строка string1 лексикографически стоит после строки string2 (для текущей локали).

# arg1 OP arg2
Здесь OP - это одна из операций арифметического сравнения: -eq (равно), -ne (не равно), -lt (меньше чем), -le (меньше или равно), -gt (больше), -ge (больше или равно). В качестве аргументов могут использоваться положительные или отрицательные целые.

# !(expression)
Булевский оператор отрицания.

# expression1 -a expression2
Булевский оператор AND (И). Верен, если верны оба выражения.

# expression1 -o expression2
Булевский оператор OR (ИЛИ). Верен, если верно любое из двух выражений.