Pracownia Komputerowa wykład III dr Magdalena Posiadała-Zezula dr Jan Suffczyński 1
Powłoki - rodzaje! W Linux ie mamy kilka powłok do wyboru:! sh : Bourne Shell, oryginalna powłoka systemu unix! csh : C shell, nowa składnia polecen, udogodnienia w pracy interakcyjnej! ksh : Korn shell, zgodnosc składniowa z powłoka Bourne a +m.innymi udogodnienia jak w powłoce csh! bash : Bourne Again Shell, połaczenie najlepszych cech csh i ksh! tcsh : udoskonalona wersja csh 2
Powłoki! Typ powłoki definiuje administrator systemu w pliku z hasłami! Obecnie każdy użytkownik w OKWF ma standardowo ustawioną powłokę bash (zmienna $SHELL)! Standardowo uruchamiane skrypty:! przy logowaniu: /etc/profile i./bash_profile! start powłoki:./bashrc 3
POWŁOKA BASH -Bourne Again Shell (1)! Bash to skrót od wyrazów Bourne Again Shell. Powłoka ta jest dostępna za darmo i jest domyślną powłoką systemu Red Hat Linux! Dokańczanie poleceń- dzięki niej nie trzeba wpisywać pełnej nazwy programu (ścieżki do katalogu, pliku itp) lub znać jego dokładnej nazwy. Wystarczy, wpisać jego pierwszą literkę i wcisnąć klawisz TAB. 4
POWŁOKA BASH -Bourne Again Shell (2)! Historia poleceń - Bash zapamiętuje wydane przez użytkownika polecenia, dzięki temu za pomocą klawiszy kursora (góra - dół), można szybko przywołać polecenie, które zostało wcześniej wydane.! Lista wydanych przez użytkownika poleceń jest ładowana z pliku historii, który domyślnie nosi nazwę.bash_history.! Parametry nazwy pliku historii oraz ilości przechowywanych w nim ostatnio wydanych poleceń ustalają zmienne HISTFILE oraz HISTSIZE powłoki.! Aby obejrzeć na ekranie dostępne z historii polecenia wystarczy użyć polecenia:! history 5
Zmienne! Zmienne służą do określania konfiguracji powłoki i są one dostępne dla wszystkich procesów potomnych. Wszystkie dostępne zmienne można wylistować poleceniem: printenv more! Najbardziej użyteczne zmienne powłoki:! HOME określa pełną scieżkę katalogu domowego,! USER- określa nazwę zalogowanego użytkownika! PATH - ścieżka przeszukiwania,! PWD - określa nazwę bieżącego katalogu,! HOSTNAME - nazwa komputera,! Wszystkie zmienne tracą ważność po wylogowaniu się i aby były dostępne za każdym razem, trzeba je dodać do plików konfiguracyjnych bash a. 6
Pisanie skryptów w Bash-u (1)! Wszystkie shelle oferują rodzaj języka skryptowego. Za jego pomocą można pisać różne rodzaje skryptów: od tych prostych, które ograniczają się do wykonania serii poleceń, do bardzo skomplikowanych, zawierających różne pętle, warunki itp.! Skrypty można pisać we wszelkiego rodzaju edytorach tekstu. Jest to zwykły plik tekstowy, ale zawierający w pierwszej linijce : #!/bin/bash! Kolejne programy wywołuje się przez wpisanie ich kolejno do tego pliku.! Powłoka zakłada, że każda linia to osobne polecenie! Komentarze zaczynają się od znaku # 7
Pisanie skryptów w Bash-u (2)! Aby taki skrypt można było uruchomić, należy nadać mu atrybut wykonywalności, np. poleceniem! chmod u+x skrypt.sh! Tak przygotowany skrypt uruchamia się jak każdy inny program tzn. :!./skrypt.sh 8
Zmienne w skryptach (1)! W skryptach powłoki można definiować tzw. zmienne, czyli wartości przypisane do nazwy.! Zmienne definiuje się tak:! ZMIENNA=123! ZMIENNA="wartość tekstowa! Przypisanie do zmiennej wartości tekstowej tak jak powyżej będzie powodowało "rozwijanie" zmiennych. Oznacza to, że jeśli między cudzysłowy użytkownik wpisze zmienną w postaci $ZMIENNA1, to zmienna, do której chcemy to przypisać, będzie zawierała wartość zmiennej ZMIENNA1 9
Zmienne w skryptach (2)! Bash oferuje sporo pre-definiowanych zmiennych. Oto ich skrócona lista:! $0 - ścieżka do skryptu - dokładnie taka, z jaką wywołano ten skrypt.! $1, $2... - zmienne, które zawierają wartość kolejnych parametrów podanych do skryptu.! $# - liczba argumentów skryptu. 10
Pisanie skryptów- przykład 1 Utworzyć skrypt o nazwie przyklad1.sh: #!/bin/bash # (Tu jest komentarz) definuje w jakiej powłoce będzie uruchamiany skrypt echo "Pierwszy program pwd! Zmienić prawa dostępu pliku przyklad1.sh aby móc go wykonywać! Uruchomić w terminalu przyklad1.sh ->./przyklad1.sh 11
Pisanie skryptów- przykład 2! #!/bin/bash echo "Witam. Twoj login to $USER" echo "Lista plików w bieżącym katalogu, $PWD" ls # wypisz listę plików 12
Pisanie skryptów- przykład 3 pętla for! #!/bin/sh! for (( i=1; $i <= 10; i++ )) ; do! echo " Iteracja nr: $i"! done 13
Pisanie skryptów- parametry! Odwoływanie się do argumentów z linii komend :! #!/bin/sh! echo nazwa skryptu to $0! echo pierwszy argument to $1! echo drugi argument to $2! echo siedemnasty argument to $17! echo ilość argumentów to $# 14
Pisanie skryptów- przykład 4 parametry! Kod skryptu skrypt.sh! #!/bin/sh! mkdir $1 - $1 to pierwszy parametr podany podczas uruchamiania skryptu zaraz po jego nazwie! mkdir $2! ls ltr! Uruchamiamy skrypt z parametrami wejściowymi!./skrypt nazwa_kat1 nazwa_kat2 15
Warunkipolecenie test (1)! Do sprawdzania warunków służy polecenie test! Polecenie test zwraca wartość 0 (true) jeśli warunek jest spełniony i wartość 1 (false) jeśli warunek nie jest spełniony! Uwaga! Nie można skryptom nadawać nazwy test! Nie będą działać. Składnia: test wyrażenie1 operator wyrażenie2 lub może być zapisane w postaci nawiasów kwadratowych: [ wyrażenie1 operator wyrażenie2 ] Uwaga! Między nawiasami a treścią warunku muszą być spacje, tak jak powyżej. 16
Opcje polecenia test (2) Operacje na systemie plików -b plik istnieje i jest blokowym plikiem specjalnym -c plik istnieje i jest plikiem znakowym -d katalog istnieje -e plik istnieje -f plik istnieje i jest plikiem zwykłym -h plik istnieje i jest linkiem symbolicznym -r plik można czytać -w plik można zapisywać -x plik można wykonywać plik1 -nt plik2 plik1 jest nowszy od pliku2 plik1 -ot plik2 plik1 jest starszy od pliku2 wiecej na man bash. 17
Opcje polecenia test (3) Operacje arytmetyczne: -eq równy (equal to) -ne różny (not equal to) -lt mniejszy niż (less than) -le mniejszy lub równy (less than or equal to) -gt większe niż (greather than) -ge większe lub równe (greather or equal to) Operacje operujące na łańcuchach znakowych = równy!= różny < pierwszy tekst alfabetycznie przed drugim > pierwszy tekst alfabetycznie za drugim -n wyrażenie ma długość większą niż 0 -z wyrażenie ma zerową długość [ $x = "" ] Więcej przykładów man test, man bash 18
Instrukcja if (1) Sprawdza czy warunek jest prawdziwy, jeśli tak to wykonane zostanie polecenie znajdujące się po słowie kluczowym then. Instrukcja kończy się słowem fi. Składnia: if warunek then polecenie fi Przykład: #!/bin/bash if [ -e ~/.bash_history ] then echo "Masz plik.bash_history fi 19
Instrukcja if (2) Inny zestaw poleceń, które umieszczamy po słowie kluczowym else: Składnia: if warunek then polecenie1 else polecenie2 fi Przykład: #!/bin/bash if [ -e ~/.bash_history ] then echo "Masz plik.bash_history else echo "Nie masz pliku.bash_history fi 20
Testowanie dowolniej ilości warunków- elif (1) Można też testować dowolną ilość warunków, jeśli pierwszy warunek nie będzie prawdziwy, sprawdzony zostanie następny, kolejne testy warunków umieszczamy po słowie kluczowym elif. Składnia: if warunek then polecenie1 elif warunek then polecenie2 fi 21
Testowanie dowolniej ilości warunków- elif Można też testować dowolną ilość warunków, jeśli pierwszy warunek nie będzie prawdziwy, sprawdzony zostanie następny, kolejne testy warunków umieszczamy po słowie kluczowym elif. Przykład: #!/bin/bash if [ -x /opt/kde/bin/startkde ]; then echo "Masz KDE w katalogu /opt" elif [ -x /usr/bin/startkde ]; then echo "Masz KDE w katalogu /usr" elif [ -x /usr/local/bin/startkde ]; then echo "Masz KDE w katalogu /usr/local" else echo "Nie wiem gdzie masz KDE" fi 22
Koniec 23