Змінні відіграють ключову роль у написанні скриптів та розумінні логіки коду, який ви можете використовувати у вашій системі Linux. Ця стаття ознайомить вас з основами їх застосування.
Що таке змінні?
Змінні – це символічні імена, які використовуються для представлення текстових або числових значень. Коли ви їх використовуєте в командах або виразах, вони обробляються так, ніби ви ввели їхнє значення безпосередньо.
Створення змінної відбувається шляхом присвоєння їй імені та значення. Імена змінних повинні бути зрозумілими та відображати суть даних, які вони зберігають. Вони не повинні починатися з цифри, містити пробіли, але можуть починатися з підкреслення. Можливе використання комбінації великих і малих букв та цифр.
Приклади створення змінних
Розглянемо створення п’яти змінних. Синтаксис передбачає введення імені, знаку рівності (=) та значення. Важливо, щоб перед і після знаку рівності не було пробілів. Процес надання значення змінній часто називають її ініціалізацією.
Створимо чотири рядкові змінні та одну числову: ім'я = "значення"
користувач=Андрій
система=Ubuntu
друг=Олег
хобі=Програмування
рік=2024
Щоб перевірити значення змінної, скористайтеся командою echo
. Необхідно вказати знак долара ($) перед назвою змінної, коли ви звертаєтеся до її значення:
echo $користувач
echo $система
echo $рік
Поєднаємо всі змінні в одній команді:
echo "$система це операційна система $користувача, а $хобі мого друга $друг. (c) $рік"
Значення змінних підставляються замість їхніх імен. Ви також можете змінювати значення змінних. Щоб присвоїти змінній система
нове значення, повторіть процес ініціалізації:
система=MacOS
Якщо ви знову запустите попередню команду echo
, ви отримаєте інший результат:
echo "$система це операційна система $користувача, а $хобі мого друга $друг. (c) $рік"
Таким чином, ви можете використовувати одну і ту саму команду, але отримувати різні результати, змінюючи значення змінних.
Варто запам’ятати декілька ключових моментів:
- Змінна в одинарних лапках
'
обробляється як літеральний рядок, а не як змінна. - Змінні в подвійних лапках
"
обробляються як змінні. - Для отримання значення змінної потрібно використовувати знак долара
$
. - Змінна без знака
$
означає її ім’я.
Ви можете створювати нові змінні на основі існуючих. Наприклад, нова змінна, яка поєднує значення змінних система
та рік
:
новий_запис="$система $рік"
echo $новий_запис
Використання змінних у скриптах
Без змінних можливості скриптів були б суттєво обмежені. Змінні забезпечують гнучкість, дозволяючи створювати універсальні, а не конкретні рішення. Розглянемо приклад скрипту для підрахунку файлів у каталозі /usr/bin
:
Створіть текстовий файл та збережіть його як count_files.sh
:
#!/bin/bash каталог=/usr/bin кількість_файлів=$(ls $каталог | wc -l) echo "Кількість файлів в каталозі $каталог: $кількість_файлів"
Перед запуском скрипту необхідно надати йому права на виконання:
chmod +x count_files.sh
Запустіть скрипт:
./count_files.sh
Скрипт виведе кількість файлів у каталозі /usr/bin
. Ось як це працює:
- Змінна
каталог
зберігає шлях до каталогу. - Змінна
кількість_файлів
отримує значення за допомогою командної підстановки$(...)
. - Команда
ls $каталог
виводить список файлів у вказаному каталозі. - Вивід команди
ls
передається доwc -l
, яка підраховує кількість рядків, що відповідає кількості файлів. - Останній рядок виводить результат.
Скрипт працює тільки для каталогу /usr/bin
. Змінимо його для роботи з будь-яким каталогом.
Параметри командного рядка
Команди, такі як ls
і wc
, можуть приймати параметри з командного рядка. Вони надають додаткову інформацію про те, як команда повинна працювати. Наприклад, команда ls -la ~
виведе приховані файли у вашому домашньому каталозі, де ~
та -la
є параметрами.
Наші скрипти також можуть приймати параметри командного рядка. Доступ до них здійснюється через $1
для першого параметра, $2
для другого і так далі. $0
зарезервовано для імені скрипту.
Змінимо наш скрипт та збережемо його як count_files2.sh
:
#!/bin/bash каталог=$1 кількість_файлів=$(ls $каталог | wc -l) echo "Кількість файлів в каталозі $каталог: $кількість_файлів"
Змінна каталог
тепер отримує значення першого параметра командного рядка ($1
).
Решта скрипту працює так само. Тепер він є універсальним і може використовуватись для будь-якого каталогу.
Зробіть скрипт виконуваним:
chmod +x count_files2.sh
Випробуйте його з різними каталогами:
./count_files2.sh /usr/bin
./count_files2.sh /etc
./count_files2.sh /home
Ви отримаєте кількість файлів у кожному з переданих каталогів. Для спрощення скрипту можна відмовитися від змінної каталог
та використовувати $1
безпосередньо:
#!/bin/bash кількість_файлів=$(ls $1 | wc -l) echo "Кількість файлів в каталозі $1: $кількість_файлів"
Спеціальні змінні
Змінна $0
завжди встановлюється на ім’я файлу скрипту. Це корисно для ведення журналу, коли потрібно знати ім’я процесу. Інші корисні спеціальні змінні:
$#
: кількість переданих параметрів.$@
: всі параметри.$?
: статус завершення останнього процесу.$$
: PID поточного скрипту.$USER
: ім’я користувача.$HOSTNAME
: ім’я хоста.$SECONDS
: час роботи скрипту в секундах.$RANDOM
: випадкове число.$LINENO
: номер рядка скрипту.
Виведемо їх всі:
Створіть файл special_vars.sh
:
#!/bin/bash echo "Кількість параметрів: $#" echo "Параметри: $@" echo "Перший параметр: $1" echo "Назва скрипту: $0" pwd echo "Статус pwd: $?" echo "PID скрипту: $$" echo "Користувач: $USER" echo "Хост: $HOSTNAME" sleep 3 echo "Час роботи: $SECONDS секунд" echo "Випадкове число: $RANDOM" echo "Номер рядка: $LINENO"
Зробіть його виконуваним:
chmod +x special_vars.sh
Запустіть його з різними параметрами:
Змінні оточення
Bash використовує змінні оточення для визначення властивостей середовища під час запуску. Це інформація про користувача, локаль, кількість команд в історії та інше.
Перегляньте активні змінні оточення:
env | less
Ви можете використовувати їх у своїх скриптах.
Експорт змінних
Коли запускається скрипт, він має власний процес, і його змінні недоступні за його межами. Щоб поділитися змінною з іншим скриптом, її потрібно експортувати.
Створимо два скрипти: script1.sh
#!/bin/bash first_var=alpha second_var=bravo echo "$0: first_var=$first_var, second_var=$second_var" export first_var export second_var ./script2.sh echo "$0: first_var=$first_var, second_var=$second_var"
і script2.sh
:
#!/bin/bash echo "$0: first_var=$first_var, second_var=$second_var" first_var=charlie second_var=delta echo "$0: first_var=$first_var, second_var=$second_var"
Скрипт script1.sh
створює дві змінні, виводить їх, експортує і запускає script2.sh
. Після завершення script2.sh
він виводить змінні знову. script2.sh
також виводить значення змінних, змінює їх та виводить знову.
Зробіть обидва скрипти виконуваними:
chmod +x script1.sh chmod +x script2.sh
Запустіть script1.sh
:
./script1.sh
Як видно з виводу:
script1.sh
друкуєalpha
таbravo
.script2.sh
друкує значення, які він отримав –alpha
таbravo
.script2.sh
змінює змінні наcharlie
іdelta
.script1.sh
знову друкує значення своїх змінних, які залишилисьalpha
таbravo
.
Зміни у другому скрипті не впливають на змінні в першому. Фактично, створюються копії змінних, які потім відкидаються після завершення другого скрипту.
Використання лапок
При використанні змінних в скриптах часто застосовуються подвійні лапки "
. Це дозволяє правильну обробку значень змінних при виконанні скрипту.
Якщо значення змінної містить пробіли, його необхідно взяти в лапки при присвоєнні. Це пов’язано з тим, що Bash використовує пробіли як роздільники.
Наприклад:
назва_сайту=Мой Сайт
Bash вважає пробіл перед “Сайт” як ознаку запуску нової команди. Змінна назва_сайту
залишається порожньою.
Виправимо це, взявши значення в лапки:
назва_сайту="Мій Сайт"
Тепер значення правильно присвоєно змінній.
Команда echo – ваш помічник
Потрібен час, щоб звикнути до підстановки команд, цитування змінних та запам’ятовування знаку долара. Для перевірки своїх команд, перед їх фактичним виконанням, застосовуйте команду echo
. Це допоможе вам уникнути помилок та переконатися, що ви все зрозуміли правильно.