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.