Выбрать главу

# Шестнадцатиричное: числа начинаются с '0x' или '0X'

let "hex = 0x32"

echo "шестнадцатиричное число = $hex" # 50

# Результат печатается в десятичном виде.

# Другие основы счисления: ОСНОВА#ЧИСЛО

# ОСНОВА должна быть между 2 и 64.

# для записи ЧИСЛА должен использоваться соответствующий ОСНОВЕ диапазон символов,

# см. ниже.

let "bin = 2#111100111001101"

echo "двоичное число = $bin" # 31181

let "b32 = 32#77"

echo "32-ричное число = $b32" # 231

let "b64 = 64#@_"

echo "64-ричное число = $b64" # 4094

#

# Нотация ОСНОВА#ЧИСЛО может использоваться на ограниченном

#+ диапазоне основ счисления (от 2 до 64)

# 10 цифр + 26 символов в нижнем регистре + 26 символов в верхнем регистре + @ + _

echo

echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))

# 1295 170 44822 3375

# Важное замечание:

# --------------

# Использование символов, для записи числа, выходящих за диапазо,

#+ соответствующий ОСНОВЕ счисления

#+ будет приводить к появлению сообщений об ошибках.

let "bad_oct = 081"

# numbers.sh: let: oct = 081: value too great for base (error token is "081")

# Для записи восьмеричных чисел допускается использовать

#+ только цифры в диапазоне 0 - 7.

exit 0 # Спасибо Rich Bartell и Stephane Chazelas, за разъяснения.

Часть 3. Углубленный материал

Глава 9. К вопросу о переменных

Правильное использование переменных может придать сценариям дополнительную мощь и гибкость, а для этого необходимо изучить все тонкости и нюансы.

9.1. Внутренние переменные

Встроенные переменные $BASH

путь к исполняемому файлу Bash

bash$ echo $BASH

/bin/bash

$BASH_VERSINFO[n]

это массив, состоящий из 6 элементов, и содержащий информацию о версии Bash. Очень похожа на переменную $BASH_VERSION, описываемую ниже.

# Информация о версии Bash:

for n in 0 1 2 3 4 5

do

echo "BASH_VERSINFO[$n] = ${BASH_VERSINFO[$n]}"

done

# BASH_VERSINFO[0] = 2 # Major version no.

# BASH_VERSINFO[1] = 05 # Minor version no.

# BASH_VERSINFO[2] = 8 # Patch level.

# BASH_VERSINFO[3] = 1 # Build version.

# BASH_VERSINFO[4] = release # Release status.

# BASH_VERSINFO[5] = i386-redhat-linux-gnu # Architecture

# (same as $MACHTYPE).

$BASH_VERSION

версия Bash, установленного в системе

bash$ echo $BASH_VERSION

2.04.12(1)-release

tcsh% echo $BASH_VERSION

BASH_VERSION: Undefined variable.

Проверка переменной $BASH_VERSION -- неплохой метод проверки типа командной оболочки, под которой исполняется скрипт. Переменная $SHELL не всегда дает правильный ответ.

$DIRSTACK

содержимое вершины стека каталогов (который управляется командами pushd и popd)

Эта переменная соответствует команде dirs, за исключением того, что dirs показывает полное содержимое всего стека каталогов.

$EDITOR

заданный по-умолчанию редактор, вызываемый скриптом, обычно vi или emacs.

$EUID

"эффективный" идентификационный номер пользователя (Effective User ID)

Идентификационный номер пользователя, права которого были получены, возможно с помощью команды su.

Значение переменной $EUID необязательно должно совпадать с содержимым переменной $UID.

$FUNCNAME

имя текущей функции

xyz23 ()

{

echo "Исполняется функция $FUNCNAME." # Исполняется функция xyz23.

}

xyz23

echo "FUNCNAME = $FUNCNAME" # FUNCNAME =

# Пустое (Null) значение за пределеми функций.

$GLOBIGNORE

Перечень шаблонных символов, которые будут проигнорированы при выполнении подстановки имен файлов (globbing) .

$GROUPS

группы, к которым принадлежит текущий пользователь

Это список групп (массив) идентификационных номеров групп для текущего пользователя, как эо записано в /etc/passwd.