Zmienne systemowe, często nazwane także zmiennymi środowiskowymi (ang.environment variables) - są zdefiniowane i przechowywane w środowisku nadrzędnym (powłoce z której uruchamiane są Twoje skrypty). Ich nazwy są zwyczajowo tworzone z dużych liter i mogą być testowane poleceniem set. Definują środowisko użytkownika, dostępne dla wszystkich procesów potomnych
Zmienne środowiskowe i ich zasięg:
- globalne - widoczne w każdym podshellu
- lokalne - widoczne tylko dla tego shella w którym został ustawione
Aby bardziej uzmysłowić sobie różnicę między nimi zróbmy mały eksperyment: otwórz dowolny terminal (widoczny podshell) i wpisz:
x="napis"
echo $x
xterm
x="napis" zdefiniowałeś właśnie zmienną x, która ma wartość "napis"
echo $x wyświetli wartość zmiennej x
xterm wywołanie podshella
wpiszmy jeszcze raz:
echo $x nie pokaże nic, bo zmienne lokalne nie są widoczne w podshellach
Inicjacja zmiennych globalnych:
export x="napis"
Teraz zmienna x będzie widoczna w podshellach, jak widać wyżej służy do tego polecenie export, nadaje ono wskazanym zmiennym atrybut zmiennych globalnych. Jeśli napiszesz samo export, opcjonalnie export -p uzyskasz listę aktualnie eksportowanych zmiennych. Na tej liście przed nazwą każdej zmiennej znajduje się zapis:
declare -x
To wewnętrzne polecenie BASH-a, służące do definiowania zmiennych i nadawania im atrybutów, -x to atrybut eksportu czyli jest to, to samo co polecenie export.
Uwaga! Polecenie declare występuje tylko w BASH-u, nie ma go w innych powłokach, natomiast export występuje w ksh, ash i innych, które korzystają z plików startowych /etc/profile.
Zaleca się stosowanie polecenia export.
export -n zmienna
Spowoduje usunięcie atrybutu eksportu dla danej zmiennej
Niektóre przykłady zmiennych środowiskowych:
- $HOME
- ścieżka do twojego katalogu domowego
- $USER
- twój login
- $HOSTNAME
- nazwa twojego hosta
- $OSTYPE
- rodzaj systemu operacyjnego
- $UID
- Unique User ID - unikalny numer użytkownika
- $TERM
- Typ terminala z jakiego korzystamy
I wiele, wiele innych wszystkie dostępne zmienne srodowiskowe można wyświetlić za pomoca polecenia:
printenv | less
W niektórych systemach nie istnieje polecenie printenv, można skorzystać z env.
Do zmiennych systemowych odwołujemy się identycznie jak do normalnych.
Definiując zmienne jako systemowe, należy upewnić się czy polecenie export udostępnienia zmienne powłokom potomnym (podshellom) :
bash$ SCRIPT_PATH=/usr/bin/skrypt.sh
bash$ export SCRIPT_PATH
Uwaga:
Zauważ brak znaku $ przy korzystaniu z polecenia export!
Nowoczesne powłoki systemowe umożliwiają wykonywanie tego w jednej linii:
bash$ export SCRIPT_PATH=/usr/bin/skrypt.sh





