Время меняется, как и переменные!
Должно быть, вы немного поиграли с переменными, если занимались каким-либо программированием.
Если вы никогда раньше не работали с переменными, вы можете думать о них как о контейнере, в котором хранится часть информации, которая может изменяться с течением времени.
Переменные всегда пригодятся при написании сценария 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». Вы не согласны?
Теперь давайте посмотрим на сценарий построчно, чтобы убедиться, что вы все понимаете.
Сначала мы включили строку shebang, чтобы явно указать, что мы будем использовать оболочку bash для запуска этого скрипта.
#!/bin/bash
Далее мы просим пользователя ввести его/ее имя:
echo "Как тебя зовут, незнакомец?"
Это просто простая команда echo для вывода строки на терминал; довольно понятно
Теперь вот линия, где происходит вся магия:
read name
Здесь мы использовали команду read, чтобы передать элемент управления из запущенного скрипта пользователю, чтобы пользователь мог ввести имя и затем сохранить любое введенное пользователем значение в переменной «name».
Наконец, скрипт приветствует пользователя с его именем:
echo “Hello, $name”
Обратите внимание, что перед именем переменной должен стоять знак доллара, чтобы получить значение, хранящееся в имени переменной. Если вы опустите знак доллара, вместо этого будет отображаться «Hello, имя».
Этот знак доллара известен как оператор разыменования в скриптах bash.
Давайте еще немного поэкспериментируем с переменными.
Вы можете использовать знак равенства, чтобы создать и установить значение переменной. Например, следующая строка создаст переменную с именем age и установит для нее значение 40.
age=40
После того, как вы создали переменную age, вы можете изменять ее значение столько раз, сколько захотите.
age=41
Приведенная выше команда изменяет значение переменной age с 40 на 41.
Переменные могут содержать различные типы данных; переменные могут хранить целые числа, строки и символы.
letter=’c’ color=’red’ year=2020
Вы также можете создать постоянную переменную, то есть переменную, значение которой никогда не изменится! Это можно сделать, поставив перед именем вашей переменной команду readonly:
readonly PI=3.14159
Приведенная выше команда создаст постоянную переменную PI и установит ее значение 3,14159. Теперь вы не можете изменить значение постоянной переменной, если вы попытаетесь, вы получите ошибку:
bash: PI: readonly variable
Вы можете только прочитать значение постоянной переменной, но вы никогда не сможете изменить ее значение после ее создания.
Возможность сохранения результатов команды в переменной называется подстановкой команд, и это, безусловно, одна из самых удивительных функций bash.
Команда date — классический пример демонстрации подстановки команд:
TODAY=$(date)
Приведенная выше команда сохранит выходные данные команды date в переменную TODAY. Обратите внимание, как вам нужно заключить команду даты в пару круглых скобок и знак доллара (слева).
Кроме того, вы также можете заключить команду в пару обратных кавычек:
TODAY=`date`
Метод обратных кавычек — это старый способ подстановки команд, поэтому мы настоятельно рекомендуем вам избегать его и придерживаться современного подхода:
variable=$(command)
Теперь, когда вы только что узнали, как выполнять подстановку команд, имеет смысл посетить скрипт Hello World в последний раз, чтобы усовершенствовать его!
В прошлый раз вы попросили пользователя ввести его/ее имя, чтобы скрипт приветствовал их; на этот раз вы не собираетесь спрашивать, ваш сценарий уже знает это!
Используйте команду whoami вместе с подстановкой команд, чтобы приветствовать любого, кто запускает скрипт:
#! /bin/bash echo "Hello, $(whoami)"
Как видите, вам понадобилось всего две строчки! Теперь запустите скрипт:
./hello.sh
Работает как часы!
Хорошо, это подводит нас к концу этой статьи. Надеюсь, вам понравилось работать с переменными оболочки так же, как и мне.
Здравствуйте, уважаемый автор.
Можете мне ответить?
При запуске скрипт запрашивает 2 переменные: read M N
Из скрипта узнаю количество аргументов: $#
Пишет ответ: 0
Если тот же, read M N, вставить в функции и спросить сколько аргументов в скрипте, даёт нормальный ответ.
Подскажите пожалуйста, в чём вообще разница есть или где можно узнать?