
Змінні оболонки
Функціональність bash та багатьох інших програм Linux керується станами так званих змінних оболонки. Такі змінні можна порівняти зі змінними мови програмування, проте в них можна зберігати тільки послідовності символів. Присвоювання змінних оболонки здійснюється за допомогою оператора присвоєння =. Щоб відобразити вміст оболонкової змінної, потрібно скористатися командою echo, при цьому перед ім'ям змінної необхідно поставити символ $:
user $ var = abc user $ echo $ var abc
При присвоєнні змінних не можна залишати між оператором присвоювання = і ім'ям змінної прогалин. Запис var = abc синтаксично невірний і працювати не буде.
Якщо у вмісті оболонкової змінної повинні міститися пробіли або інші спеціальні символи, то при присвоєнні всю послідовність символів необхідно укласти в одиночні лапки:
user $ var = 'abc efg'
При присвоєнні можна записувати один за одним відразу по кілька послідовностей символів. У наступному прикладі змінній а присвоюється нова послідовність символів, що складається з вмісту цієї змінної, послідовності символів xxx і ще раз з вихідного вмісту:
user $ a = 3
user $ a = $ a'xxx '$ a user $ echo $ a 3 xxx 3
У наступному прикладі наявна змінна PATH (зі списком усіх каталогів, в яких може здійснюватися пошук виконуваних програм) доповнюється в домашньому каталозі каталогом bin. Тепер ви можете виконувати будь-які команди, що знаходяться в цьому каталозі (Не вказуючи шлях повністю).
user $ echo $ PATH
/ Usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
user $ PATH = $ PATH ': / home / kofler / bin'
user $ echo $ PATH / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / home / kofler / bin
Обчислення з змінними можна робити в квадратних дужках описаним вище способом:
user $ a = 3 user $ a = $ [$ a * 4] user $ echo $ a 12
Вміст змінних зберігається тільки в оболонці. При виході з оболонки ця інформація втрачається. Якщо певні змінні потрібні вам знову, то присвоювання слід проводити у файлі / etc / profile або .profile домашнього каталогу. Обидва файли (якщо вони є) автоматично виконуються при запуску bash.
Якщо ви хочете зберегти вміст однієї із змінних у файлі, то потрібно виконати команду echo з переадресацією введення:
user $ echo $ var> file
Локальні і глобальні змінні( змінні оточення)
Терміни «локальний» і «глобальний» для опису змінних взяті зі світу мов програмування. Змінна оболонки вважається глобальною, якщо вона передається далі при запуску команди або програми оболонки. Часто глобальні змінні іменуються змінними оточення (environment variables).
Зверніть увагу, що всі змінні, отримані в результаті звичайного присвоювання, можуть бути тільки локальними! Щоб задати глобальну змінну, слід виконати export або declare -x.
Для управління змінними в оболонці існують численні команди, які функціонально іноді дублюють один одного. Наприклад, для оголошення глобальної змінної можна використовувати як export, так і declare -x. Наступні приклади наводяться для того, щоб трохи прояснити ситуацію з дублюючими командами:
a = 3 Короткий спосіб запису let, змінна a є локальною
declare a = 3 Привласнює локальній змінній а значення (як let)
declare -xa = 3 Привласнює локальній зміннії а значення (як export)
export Показує всі глобальні змінні
export a Робить змінну а глобальної
export a = 3 Привласнює глобальної змінної а значення
let a = 3 Привласнює глобальної змінної а значення
local a = 3 Визначає змінну а як локальну (лише у функціях оболонки)
printenv Як і export, відображає всі глобальні змінні
set Показує всі змінні (і локальні, і глобальні)
unset a Видаляє змінну а
Якщо ви створюєте змінні, які повинні керувати роботою інших команд Linux, ці змінні завжди повинні бути глобальними. Присвоювання змінних завжди залишається дійсним тільки для однієї оболонки. Якщо ви працюєте з декількома терміналами або вікнами терміналів, в кожному з них функціонує самостійна оболонка, яка не залежить від інших. Зміна змінної в оболонці ніяк не впливає на інші оболонки. Однак часто використовувані присвоювання змінних можна записати у файлі ~ / .profile, Який буде автоматично виконуватися при запуску оболонки.
Найважливіші змінні оболонки
В принципі можна ввести скільки завгодно нових змінних, назвати їх на свій смак і використовувати за власним розсудом. При цьому не слід застосовувати змінні, які вже існують, так як вони зазвичай інтерпретуються bash, а часто й іншими командами Linux. При неконтрольованій зміні таких змінних можна пошкодити механізм обробки команд Linux.
У цьому розділі в алфавітному порядку будуть описані найважливіші оболонкові змінні.
BASH містить ім'я файлу bash.
HOME містить шлях до домашнього каталогу, наприклад /home/mk.
LOGNAME зберігає логін (ім'я користувача).
HOSTNAME містить хост-ім'я (ім'я комп'ютера).
MAIL включає шлях до каталогу, в якому зберігається вхідна пошта (тільки якщо у вас встановлений локальний поштовий сервер).
OLDPWD містить шлях до останніх використовувалися каталогах.
PATH зберігає список каталогів. Якщо bash повинна виконати команду, вона переглядає всі каталоги, перераховані в PATH, у пошуках команди. Каталоги відокремлюються один від одного двокрапкою. Налаштування PATH відрізняється від дистрибутива до дистрибутива, в різних місцях системи в ході запуску (Init-V, Upstart). Найкраще робити власні зміни в / etc / profile або (якщо у вашому дистрибутиві передбачена така можливість) у файлі каталогу /etc/profile.d. Туди необхідно вставити команду у відповідності з наступним зразком:# Доповнення в / etc / profile або в /etc/profile.d/myown.sh
PATH = $ PATH: / myown / bin
З міркувань безпеки (щоб уникнути незапланованого виконання програм у поточному каталозі), в PATH не вказується локальний каталог. Якщо ви хочете виконувати програми, що містяться в поточному каталозі, що не вказуючи перед ними ./, потрібно доповнити PATH точкою.
PROMPT_COMMAND може містити команду, виконувану всякий раз, коли bash відображає запрошення командного рядка.
PS1 зберігає послідовність символів, вміст якої відображається поруч з початком кожного рядка введення (ця послідовність називається підказкою, чи запрошенням). У ній передбачені в числі інших наступні послідовності символів: \ t поточний час, \ d сьогоднішня дата, \ w поточний каталог, \ W остання частина поточного каталогу (наприклад, X11 для / usr / bin / X11), \ u ім'я користувача, \ h хост-ім'я (ім'я комп'ютера), а також символ підказки \ $ (\ $ для звичайних користувачів, # для адміністратора).
PS2 схожа на PS1, але ця послідовність символів зазвичай відображається тільки для багаторядкового введення (тобто якщо перший рядок завершується символом \). Типова настройка ">".
PWD містить шлях до поточного каталогу.
Крім описаних тут, зазвичай використовуються і багато інших змінних оточення, які керують функціями оболонки, а також багатьох інших програм. Список всіх заданих змінних можна вивести за допомогою команди printenv | sort.