Переменные в скриптах
Часть раздела Основы путешествия по Terminal на Coddy — урок 68 из 82.
Переменные делают ваши скрипты гибкими и многоразовыми. Вместо жесткого кодирования значений вы можете хранить их в переменных и ссылаться на них на протяжении всего скрипта.
Чтобы создать переменную внутри скрипта, используйте тот же синтаксис, который вы узнали для терминала: без пробелов вокруг знака равенства. Чтобы использовать значение переменной, префиксуйте её имя знаком доллара:
#!/bin/bash
greeting="Hello"
name="World"
echo "$greeting, $name!"Этот скрипт выводит Hello, World!. Переменные greeting и name хранят текст, который подставляется при запуске скрипта.
Переменные становятся особенно полезными, когда нужно использовать одно и то же значение несколько раз. Если вы ссылаетесь на путь к файлу в нескольких местах, хранение его в переменной означает, что вам нужно изменить его только один раз:
#!/bin/bash
backup_dir="/home/user/backups"
echo "Creating backup in $backup_dir"
mkdir -p "$backup_dir"Обратите внимание на кавычки вокруг "$backup_dir". Оборачивание переменных в двойные кавычки — хорошая практика, поскольку это правильно обрабатывает пути или значения, содержащие пробелы. Без кавычек путь вроде /my documents сломает вашу команду.
Переменные в скриптах работают точно так же, как в терминале, но они существуют только пока выполняется скрипт. Как только скрипт завершается, эти переменные исчезают.
Задание
ЛегкоСоздайте shell-скрипт с именем intro.sh, который использует переменные для вывода персонализированного сообщения.
Ваш скрипт должен:
- Начинаться со строки shebang (
#!/bin/bash) - Создать переменную с именем
languageсо значениемBash - Создать переменную с именем
skillсо значениемscripting - Использовать
echoдля вывода обеих переменных в формате:Learning Bash scripting!
Сделайте скрипт исполняемым и запустите его. Ваш вывод должен быть:
Learning Bash scripting!Подсказка: Создайте скрипт с помощью
echoс перенаправлением. Не забудьте ссылаться на переменные с помощью$в вашем выражении echo, какecho "Learning $language $skill!"
Шпаргалка
Переменные в скриптах Bash хранят значения, которые можно использовать в течение всего скрипта. Создавайте переменные без пробелов вокруг знака равенства и обращайтесь к их значениям, добавляя перед именем переменной $:
#!/bin/bash
greeting="Hello"
name="World"
echo "$greeting, $name!"Всегда заключайте переменные в двойные кавычки, чтобы правильно обрабатывать значения с пробелами:
backup_dir="/home/user/backups"
echo "Creating backup in $backup_dir"
mkdir -p "$backup_dir"Переменные существуют только во время выполнения скрипта и исчезают после его завершения.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Каталоги
Создать каталогСкопировать каталогПереместить и переименовать каталогУдалить каталогИтог - Операции с каталогами7Содержимое файлов
Head и TailПодсчёт словКоманда sortКоманда uniqОсновы grepGrep с флагамиПовторение - Текстовый детектив10Проект анализатора логов
Обзор проектаПросмотр файла лога13Основы скриптинга оболочки
Что такое скрипт оболочкиСоздание и запуск скриптаПеременные в скриптахПользовательский ввод в скриптахОператор ifЦикл forЦикл whileИтог - Угадай число2Навигация
Вывод текущей рабочей директорииСписок файловСмена директорииАбсолютные и относительные путиДомашняя и корневая директорииИтог - Найди свой путь8Перенаправление
Стандартный выводПерезапись в файлДописывание в файлСтандартный вводСтандартная ошибкаПовторение - Сборщик логов11Права доступа
Понимание прав доступаЧтение прав доступаChmod с числамиChmod с символамиВладение файламиПовторение - Заблокируйте доступ14Проект скрипта резервного копирования
Обзор проектаПолучение пути к источнику3Файлы
Создать файлПрочитать файлСкопировать файлПереместить и переименовать файлУдалить файлПовторение - Операции с файлами6Символы подстановки и шаблоны
Звёздный символ подстановкиВопросительный символ подстановкиСкобочные символы подстановкиКомбинирование символов подстановкиПовторение - выборочные операции9Каналы
Что такое каналЦепочка двух командЦепочка нескольких командКанал с grepИтог - Конвейер данных