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:
HOSTNAMEnazwa 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++).