Параметры в Bash #
Андрей Михайлович Васильев, 2025
Версии презентации
Описание параметров #
Для объявления параметра используется синтаксис:
name=[value]Для получения доступа к значению параметра используйте расширение ${name}
- Пробелы вокруг знака равенства недопустимы
- Если не указать значение, то переменная будет содержать нулевую строку
- Декларирование переменных может происходить в рамках команд
alias,declare,typeset,export,readonly,local - Для отмены значений переменной необходимо использовать
unset name - В названии переменной можно использовать латинские символы, подчёркивания
- В качестве значения может выступать любое строковое выражение, к которому будут применены все расширения
Описание переменных. Пример #
#!/bin/bash
info='Some data goes here'
echo "Значение info: $info" # Просмотр переменной
files=$(ls) # Сохранение результата вызова ls
echo "$files"$ ls
abc test.sh
$ ./test.sh
Some data goes here
abc
test.shСо знака # начинаются комментарии
Позиционные параметры #
Внутри Bash-скрипта можно обратиться к аргументам интерпретатора с помощью позиционных параметров, которые описываются числами, начиная с 1
- Данные параметры можно заменить с помощью встроенной команды
set - Данные параметры нельзя изменить с помощью операции присвоения
#!/bin/bash
echo $1
echo $2$ bash some.sh 1 2
1
2$ ./some.sh 1 2
1
2Для доступа к позиционным аргументам, состоящему из нескольких цифр, необходимо использовать фигурные скобки
echo ${12}Специальная обработка аргументов #
Команда shift производит “сдвиг” позиционных аргументов влево
$1 <--- $2, $2 <--- $3, $3 <--- $4, ...- Значение переменной $0 не изменяется
shiftможет сдвигать сразу на несколько позиций
#!/bin/bash
echo $1
shift
echo $1И пример его запуска:
$ ./test-args.sh first second
first
secondСпециальные параметры #
Данные параметры предоставляются Bash на чтение, запись в них невозможна
*расширяется в список позиционных аргументов, начиная с первого. Если обращение происходит без двойных кавычек, то выполняется разбиение по словам@расширяется в список позиционных аргументов, начиная с первого. Если обращение происходит без двойных кавычек, то выполняется разделение по словам
Разница между ними заключается в формате расширения, первая команда зависит от
содержимого параметра IFS
# расширяется в количество позиционных параметров, обычно используется для
проверки количества переданных аргументов
-расширяется в список опций Bash0расширяется название интерпретатора или скрипта Bash
Параметры по работе с приложениями #
Для работы с процессами путём отправки им сигналов можно воспользоваться
$расширяется в идентификатор текущего процесса Bash!расширяется в идентификатор последнего фонового процесса
Обработка результатов работы команды
?расширяется в код возврата последней команды
По соглашению нулевой код возврата команды считается корректным завершением
Массивы #
Значением переменной может быть массив, индексируемый числами или строками
- любая переменная может использоваться как массив
- количество элементов в массиве не ограничено
- в численных массивах индексация начинается с нуля
Массивы можно определить с помощью
- команды
declare:declare -a variable - оператора присвоения, правой частью которого является
- индексируемый:
(value1 ... valueN) - ассоциативный:
( key1 value1 key2 value2 ) - или:
( key1=value1 key2=value2 )
- индексируемый:
Работа с элементами массива #
Для получения доступа к элементу массива следует использовать синтаксис:
${name[subscript]}- Для получения доступа ко всем элементам
${name[*]}или${name[@]} - Помещение данных выражений в кавычки работает согласно расширению позиционных параметров
Для установки нового значения элементу следует использовать синтаксис
name[subscript]=value