Параметры в 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