Поиск по сайту:
Задолжал сколько сумел, всем кому мог (Б. Шоу).

Bash для начинающих. Понимание переменных в сценариях Bash

04.07.2020
Bash Heredoc

Время меняется, как и переменные!

Должно быть, вы немного поиграли с переменными, если занимались каким-либо программированием.

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

Переменные всегда пригодятся при написании сценария bash, и в этой статье вы узнаете, как использовать переменные в сценариях bash.

 

Использование переменных в скриптах оболочки bash

В недавней статье мы учились писать программу hello world на bash.

#! /bin/bash

echo 'Hello, World!'

 

Это был простой сценарий Hello World. Давайте сделаем что-то лучше чем Hello World.

Давайте улучшим этот скрипт с помощью переменных оболочки, чтобы он приветствовал пользователей своими именами. Отредактируйте ваш скрипт hello.sh и используйте команду read для получения ввода от пользователя :

#! /bin/bash

echo "Как тебя зовут, незнакомец?"

read name

echo "Hello, $name"

 

Теперь, если вы запустите свой скрипт hello.sh; он запросит у вас ваше имя и затем приветствует вас любым именем, которое вы ему дадите:

destroyer@andreyex:~/scripts$ ./hello.sh 
Как тебя зовут, незнакомец?
AndreyEx
Hello, AndreyEx

 

В приведенном выше примере мы ввели имя AndreyEx, а затем сценарий приветствовал меня «Hello, AndreyEx». Это определенно намного лучше, чем обычная программа «Hello, World». Вы не согласны?

 

Пошаговое объяснение приведенного выше сценария оболочки

Теперь давайте посмотрим на сценарий построчно, чтобы убедиться, что вы все понимаете.

Читать  Какую версию Linux Mint я использую?

Сначала мы включили строку shebang, чтобы явно указать, что мы будем использовать оболочку bash для запуска этого скрипта.

#!/bin/bash

 

Далее мы просим пользователя ввести его/ее имя:

echo "Как тебя зовут, незнакомец?"

 

Это просто простая команда echo для вывода строки на терминал; довольно понятно

Теперь вот линия, где происходит вся магия:

read name

 

Здесь мы использовали команду read, чтобы передать элемент управления из запущенного скрипта пользователю, чтобы пользователь мог ввести имя и затем сохранить любое введенное пользователем значение в переменной «name».

Наконец, скрипт приветствует пользователя с его именем:

echo “Hello, $name”

 

Обратите внимание, что перед именем переменной должен стоять знак доллара, чтобы получить значение, хранящееся в имени переменной. Если вы опустите знак доллара, вместо этого будет отображаться «Hello, имя».

Этот знак доллара известен как оператор разыменования в скриптах bash.

 

Целые числа, строки или символы? Как создать разные переменные типы данных в оболочке bash?

Давайте еще немного поэкспериментируем с переменными.

Вы можете использовать знак равенства, чтобы создать и установить значение переменной. Например, следующая строка создаст переменную с именем age и установит для нее значение 40.

age=40

 

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

age=41

 

Приведенная выше команда изменяет значение переменной age с 40 на 41.

Читать  Linux 6.12-rc5 отключает линейную адресацию Intel «LAM» из соображений безопасности

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

letter=’c’
color=’red’
year=2020

 

Постоянные переменные в оболочке bash

Вы также можете создать постоянную переменную, то есть переменную, значение которой никогда не изменится! Это можно сделать, поставив перед именем вашей переменной команду readonly:

readonly PI=3.14159

 

Приведенная выше команда создаст постоянную переменную PI и установит ее значение 3,14159. Теперь вы не можете изменить значение постоянной переменной, если вы попытаетесь, вы получите ошибку:

bash: PI: readonly variable

 

Вы можете только прочитать значение постоянной переменной, но вы никогда не сможете изменить ее значение после ее создания.

 

Подстановки команд

Возможность сохранения результатов команды в переменной называется подстановкой команд, и это, безусловно, одна из самых удивительных функций bash.

Команда date — классический пример демонстрации подстановки команд:

TODAY=$(date)

 

Приведенная выше команда сохранит выходные данные команды date в переменную TODAY. Обратите внимание, как вам нужно заключить команду даты в пару круглых скобок и знак доллара (слева).

Кроме того, вы также можете заключить команду в пару обратных кавычек:

TODAY=`date`

 

Метод обратных кавычек — это старый способ подстановки команд, поэтому мы настоятельно рекомендуем вам избегать его и придерживаться современного подхода:

variable=$(command)

 

Прежде чем идти, попробуйте превратить скрипт Hello World в умный скрипт HelloWorld.

Теперь, когда вы только что узнали, как выполнять подстановку команд, имеет смысл посетить скрипт Hello World в последний раз, чтобы усовершенствовать его!

Читать  Как использовать apt-cache для поиска пакетов

В прошлый раз вы попросили пользователя ввести его/ее имя, чтобы скрипт приветствовал их; на этот раз вы не собираетесь спрашивать, ваш сценарий уже знает это!

Используйте команду whoami вместе с подстановкой команд, чтобы приветствовать любого, кто запускает скрипт:

#! /bin/bash           

echo "Hello, $(whoami)"

 

Как видите, вам понадобилось всего две строчки! Теперь запустите скрипт:

./hello.sh

 

Работает как часы!

Хорошо, это подводит нас к концу этой статьи. Надеюсь, вам понравилось работать с переменными оболочки так же, как и мне.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Светлана

Здравствуйте, уважаемый автор.
Можете мне ответить?
При запуске скрипт запрашивает 2 переменные: read M N
Из скрипта узнаю количество аргументов: $#
Пишет ответ: 0

Если тот же, read M N, вставить в функции и спросить сколько аргументов в скрипте, даёт нормальный ответ.

Подскажите пожалуйста, в чём вообще разница есть или где можно узнать?

Это может быть вам интересно


Рекомендуемое
KVM (виртуальная машина на основе ядра) - это технология виртуализации с…

Спасибо!

Теперь редакторы в курсе.