Skrypty powłoki Bash #4 - o zmiennych
Intro
Dzień dobry, dzień dobry. Dzisiaj na tapet bierzemy zmienne. Dzisiaj trochę ogólnikowo, ale w następnych artykułach je dopieścimy.
Typy
Bash, jest pełnoprawnym językiem skryptowym i dlatego też posiada typy zmiennych. Obejrzyjmy je.
Liczby całkowite
Podstawowym typem zmiennych dla każdego języka programowania są liczby. W bashu mamy tylko typ liczb całkowitych i niestety nie posiadamy typu zmiennoprzecinkowego jak float czy double. Możliwość wykonywania operacji zmiennoprzecinkowych w bashu istnieje. Opowiem o nich w następnych publikacjach.
Przykład stworzenia zmiennej typu int
declare -i # opcjonalne
a=1
Ciągi znakowe
Przy pracy, gdy przydają nam się komunikaty, albo wprowadzamy jakieś wartości do skryptów interaktywnych czy też będziemy przerabiać jakieś strumienie znakowe. Przyda nam się zmienna typu string. Jest to ciąg znakowy i jak nazwa wskazuje, przechowuje on znaki, słowa, zdania.
Przykład stworzenia zmiennej typu string
declare str # opcjonalne
str="hello"
Tablice indeksowane
Kiedy potrzebujemy prostej struktury danych, by przechować jakieś informacje w komórkach pamięci, przyda nam się tablica, czyli ciągły rosnący obszar w pamięci. Tablicą są bardzo przydatnym typem, w szczególności, gdy jeszcze nie poznaliśmy tajnik pracy na strumieniach lub takiej możliwości nie mamy.
Przykład stworzenia zmiennej typu array
declare -a arr # opcjonalne
arr[0]=1
arr[1]=2
arr[n]=x
Tablice asocjacyjne
Ciekawą strukturą jest tablica asocjacyjna, otóż podobnie, jak tablica indeksowana, przechowuje nam dane w pamięci, z łatwym dostępem, ale robi to w sposób inny. Otóż tablica asocjacyjna, nie wykorzystuje indeksów (cyfr/licz z zakresu 0 do n), ale korzysta z kluczy. Jest to o tyle przydatne z punktu widzenia operacji na niej, że możemy przechowywać w takiej tablicy np. kurs waluty a jako klucz nazwę tej waluty.
Przykład stworzenia zmiennej typu Associative array
declare -A assoc_arr # wymagane
assoc_arr=([JPY]=29 [PLN]=1)
Zakres
Tak jak w innych językach programowania w bashu również mamy zakresy działania zmiennych.
Wyróżniamy 3 takie zakresy:
Lokalny
Zakres działający w obrębie bloku (funkcji, pętli, warunku)
local HELLO=world
Środowiskowy
Zakres działający w całym skrypcie
x='y'
z='a'
c=1
Powłoki
Zakres działający w całej sesji, czyli zmienne będą dostępne również w procesach, działających w tej samej sesji powłoki
export var
setenv var
Działania na zmiennych
Pomówiliśmy o tym, co do wyboru mamy i w jakim zakresie, to teraz przydałoby się wiedzieć jak na zmiennych operować.
Przypisywanie
Elementarne działanie na zmiennych, bo w końcu trzeba jakoś tej zmiennej nadać wartość
var=value
WAŻNE: przy przypisaniu musi zostać zachowany zwięzły schemat zmienna=wartość (czyli bez żadnej spacji) w przeciwnym wypadku powłoka zinterpretuje wartość jako komendę.
Odwołanie
By “zawołać” naszą zmienną, do tego by pokazała, co przechowuje potrzebujemy znaku $.
Mamy kilka opcji, natomiast Ja zalecam stosowanie ostatniej formy, ponieważ zapobiega ona interpretacji wartości zawartej w zmiennej przez powłokę (co czasami może być bolesne)
$var
${var}
echo ${var}
echo "${var}"
Tworzenie stałej
Jeżeli nie chcemy, by jakikolwiek inny program czy działanie zmieniło nam wartość naszej zmiennej, np powiedzmy, że jest to czas jaki, aplikacja ma czekać przed następnym sprawdzeniem, to użyjemy słowa kluczowego readonly
by stworzyć stałą
readonly var
Czyszczenie zmiennej
Gdy uznamy, że zmienna nie jest już nam potrzebna, że się nią pobawiliśmy i nie sprawia nam już przyjemności jej wartość. Możemy ją ot, tak usunąć słowem kluczowym unset
unset var
Epilog
To by było na dziś.
Mam nadzieję, że dowiedzieliście się dziś czegoś przydatnego.
Zapraszam na następny artykuł, w którym opowiemy sobie o Zmiennych Specjalnych.
Zapraszam serdecznie.