- Переменные и параметры
- Подстановка переменных
- Примеры назначения и подстановки переменных
- Присваивание значений переменным
- Простое присваивание
- Простое и замаскированное присваивание
- Переменные Bash не имеют определенного типа
- Целое число или строка
- Специальные типы переменных
- локальные переменные
- переменные окружения
- Позиционные параметры
- Linux bash присвоить значение переменной
- Переменные
- Типы переменных
- Глобальные переменные
- Локальные переменные
- Деление переменных по их содержимому
- Создание переменных
- Экспорт переменных
- Зарезервированные переменные
- Зарезервированные переменные командной оболочки Bourne
- Зарезервированные переменные Bash
- Специальные параметры
- Расширение сферы применения скриптов, имеющих переменные
Переменные и параметры
Переменная — это один из основных элементов любого языка программирования. Переменные участвуют практически в любых операциях, будь то арифметические действия или анализ строк. По сути, любая переменная, это ячейка памяти, содержащая в себе определенные данные.
Подстановка переменных
Важно понимать разницу между именем переменной и значением этой переменной, и не забывать о ней. Например: variable — это символическое имя переменной
в то время как $variable — это уже ссылка на значение переменной ( на область памяти, содержащую значение переменной с именем variable ). Имена переменных, без префикса $, могут использоваться в процессе объявления переменной, то есть когда переменной присваивается определенное значение, при удалении значения переменной, при экспорте и в случаях — когда переменная является названием сигнала.
Присвоить значение переменной можно с помощью оператора =:
различными вариантами с использованием оператора read:
или в заголовке цикла:
Если ссылка на переменную, заключена в двойные кавычки, это никак не повлияет на работу подстановки переменной, то есть:
если-же строка с переменной заключается в одинарные кавычки, в них экранируются любые служебные символы, то строка будет выведена в том виде, в котором она записана в тесте сценария, без подстановки значения переменной:
Форма записи $var, является упрощенным вариантом $ . Запись с фигурными скобками $ , является более строгим вариантом, ее можно применять там, где обычный вариант вызывает синтаксическую ошибку.
Примеры назначения и подстановки переменных
# Использование пробелов, перед, или после, знака =, не допустимо
# При записи VAR =value, интерпретатор попытается выполнить команду VAR с параметром =value.
# Если попробовать присвоить значение переменной таким образом VAR= value, будет произведена попытка назначить переменной окружения VAR пустое
# значение, после чего, выполнить команду value.
Обратите внимание на разницу выводимых результатов в примере ниже. Если переменная заключена в двойные кавычки, пробельные символы будут сохранены а при заключении переменной в одинарные кавычки, значение переменной не подставляется, символ $ интерпретируется как обычный символ.
Объявление неинициализированной переменной, фактически то-же самое что и сброс переменной
Неинициализированная переменная содержит пустое значение, в арифметических операциях пустое значение интерпретируется как 0. Использование пустых переменных потенциально может вызывать различного рода ошибки в процессе работы сценария, однако в арифметических операциях их использование вполне допустимо.
Допускается присвоение значений нескольким переменным в одной строке.
Со старыми версиями «sh» могут возникнуть проблемы .
Присваивание значений переменным
Операцией присвоения значения переменной в bash является символ равно, «=», в зависимости от контекста использования так-же является оператором сравнения «равно».
Простое присваивание
Простое и замаскированное присваивание
# Подстановка команд, немного более сложный вариант.
Обратите внимание на восклицательный знак (!) в подстанавливаемой команде, из командной строки такой вариант работать не будет, поскольку здесь используется механизм истории команд bash. Но в сценариях использование истории команд запрещено
Переменные Bash не имеют определенного типа
В отличие от большинства других языков программирования, Bash не разделяет переменные по типам. По сути, переменные Bash являются строковыми переменными, но, в зависимости от контекста, Bash допускает целочисленную арифметику с переменными. Определяющим фактором здесь служит содержимое переменных.
Целое число или строка
Переменные не имеющие типов, палка о двух концах, с одной стороны они делают сценарии более гибкими и упрощают чтение кода, с другой могут приводить к неожиданным ошибкам и развивают в человеке «неряшливость» в программировании, кроме того вся ответственность за отслеживание типов переменных полностью ложится на программиста.
Специальные типы переменных
локальные переменные
Локальными переменными являются переменные область видимости которых ограничена вложенным блоком кода или функцией, однако переменные объявленные во вложенном блоке, доступны и за его пределами, в отличии от переменных, объявленных в теле функции.
переменные окружения
Переменные окружения затрагивают командную оболочку в целом и влияют на порядок взаимодействия с пользователем.
В общем контексте, каждый процесс имеет свое среду исполнения ( окружение ), т.е. некоторый набор переменных, которые процесс может использовать во время своей работы. Системная оболочка так-же представляет из себя процесс, со всеми вытекающими последствиями.
При запуске командного интерпретатора, для него создаются переменные, соответствующие переменным окружения. Любое изменение переменных окружения заставляет оболочку обновить свои переменные, и все дочерние процессы ( команды, запускаемые из системной оболочки) наследуют это окружение.
Пространство, выделяемое переменным окружения, ограничено. Создание слишком большого количества переменных окружения или одной переменной, которая занимает слишком большое пространство, может привести к возникновению определенных проблем.
Если сценарий меняет переменные окружения, они должны быть экспортированы, т.е передаться окружению, локальному по отношению к сценарию. Делается это с помощью команды export.
Любой сценарий может экспортировать переменные только дочернему, по отношению к себе, процессу, т.е. командам и процессам запускаемым из данного сценария. Дочерний процесс не может экспортировать переменные родительскому процессу.
Позиционные параметры
Позиционные параметры, это аргументы, получаемые сценарием при запуске из командной строки — $0, $1, $2, $3. где $0 — это название файла сценария, $1 — первый аргумент, $2 — второй, $3 — третий и так далее. Аргументы, следующие за $9, должны быть заключены в фигурные скобки, например: $ , $ , $ .
Специальные переменные $* и $@ содержат все поступившие в сценарий позиционные параметры.
Использование скобок для позиционных параметров дает простой способ обращения к последнему аргументу, переданному в сценарий из командной строки. Такой способ подразумевает использование косвенной адресации.
Сценарий может вести себя по разному в зависимости от имени сценария. Для этого сценарий должен проанализировать аргумент $0 — имя файла сценария. Это могут быть и имена символических ссылок на файл сценария.
Если сценарий ожидает передачи аргументов из командной строке, при их отсутствии он получит пустые переменные, что может вызвать нежелательный побочный эффект. Один из способов борьбы с подобными ошибками — добавить дополнительный символ в обеих частях операции присваивания, где используются аргументы командной строки.
Сценарий использующий программу whois для определения имени домена
Команда shift сдвигает позиционные параметры удаляя первый из них.
Источник
Linux bash присвоить значение переменной
Библиотека сайта rus-linux.net
На главную -> MyLDP -> Электронные книги по ОС Linux
Руководство по Bash для начинающих | ||
---|---|---|
Назад | Глава 3: Среда окружения Bash | Вперед |
Переменные
Типы переменных
Как видно из примеров, приведенных выше, переменные командной оболочки принято записывать заглавными буквами. В Bash хранятся списки переменных двух типов:
Глобальные переменные
Глобальные переменные или переменные среды окружения доступны во всех оболочках. Чтобы показать переменные среды окружения, можно использовать команды env или printenv. Эти команды поставляются в составе пакета sh-utils.
Ниже показан типичный результат выдачи:
Локальные переменные
Локальные переменные доступны только в текущей командной оболочке. Если встроенная команда set используется без каких-либо параметров, то она выдаст список всех переменных (в том числе переменные среды исполнения) и функций. Воспользуемся форматированием и выдадим отсортированный результат, учитывающий локальность переменных.
Ниже приведен файл diff, созданный путем сравнения результата работы команд printenv и set, после удаления из списка функций, которые также отображаются командой set:
Awk | |||||||||
Имя переменной | Определение | ||||||
Имя переменной | Определение | ||||
Символ | Определение | ||
Параметр $* или параметр $@ | |
Большие директории и низкая пропускная способность | |