Przejdź do treści

Podstawy

Większe programy, wymagające wykonania wielu poleceń, możemy umieścić w jednym pliku i wykonać jako skrypt Bash.

$ ./script.sh

wykonuje skrypt Bash znajdujący się w pliku script.sh. Należy pamiętać, że aby uruchomić skrypt, plik musi mieć uprawnienie do wykonywania. Nowo stworzone pliki domyślne tego uprawnienia nie mają; można użyć chmod +x script.sh.

Bash jest "pełnoprawnym" językiem programowania, który wspiera zmienne, pętle, funkcje itp. Poznamy najbardziej użyteczne aspekty Basha.

Zmienne

Zmienne możemy traktować jak etykiety, które przechowują ciągi znaków. Definiujemy je przy pomocy znaku równości bez spacji po obu stronach:

dog="Azor"

Do zmiennych w poleceniach odwołujemy się poprzedzając je symbolem $:

echo $dog       ⟶  Azor
echo $dogek     ⟶  
echo ${dog}ek   ⟶  Azorek

Okazuje się, że to, czy nazwę zmiennej umieścimy pomiędzy apostrofami, czy też cudzysłowami, ma znaczenie -- cudzysłów umozliwia interpretację znaku $ i ewaluuje zmienne.

echo 'Jestem $LOGNAME, a to jest pies $dog.'
⟶  Jestem $LOGNAME, a to jest pies $dog.
echo "Jestem $LOGNAME, a to jest pies $dog."
⟶  Jestem boraks, a to jest pies Azor.

Zmienne środowiskowe -- env

Powyżej pojawiła się zmienna LOGNAME, zawierająca nazwę użytkownika -- jedna ze zmiennych środowiskowych. Są to zmienne, które są dostępne dla wszystkich procesów uruchomionych w powłoce. Zgodnie z konwencją, ich nazwy zapisujemy dużymi literami. Przykłady innych zmiennych środowiskowych:

  • HOSTNAME nazwa maszyny, na którą się zalogowaliśmy;
  • HOME ściezka do katalogu domowego użytkownika;
  • PATH ścieżki (oddzielone dwukropkami), w których szukane są programy powłoki;
  • PWD ścieżka do aktualnego katalogu.

Zmienne w skrypcie

Do nazwy skryptu możemy się dostać za pomocą: "$0". Do kolejnych argumentów przekazanych do skryptu -- za pomocą: "$1", "$2", "$3" itd. Do listy wszystkich parametrów naraz możemy dostać się za pomocą $@, zaś do liczby parametrów za pomocą $#.

Kod wyjścia -- $?

Każdy program w powłoce zwraca tzw. kod wyjścia. Pozwala on określić, czy program zakończył się poprawnie czy nie. Kod ostatniego wykonanego polecenia możemy odczytać z $?. Status wyjścia ze skryptu zwracamy poprzez exit <num>.

Kod 0 oznacza, że program zadziałał poprawnie; inny niż 0 -- że nie (dlatego zwykle piszemy return 0 na końcu main-a w C/C++).