Zmienne powłoki Zmienne powłoki (shell variables) to tymczasowe zmienne, które mogą przechowywać wartości liczbowe lub ciągi znaków. Związane są z powłoką, Przypisania wartości do zmiennej następuje poprzez uŝycie = ZMIENNA=wartosc Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. echo $ZMIENNA 1
Zmienne Środowiskowe Zmienna środowiskowa (environment variable) przechowuje wartości liczbowe lub ciągi znaków podobnie jak zmienna powłoki, jednak dostępna jest dla wszystkich programów, nie tylko dla powłoki. Przypisanie wartości zmiennej środowiskowej następuje w taki sam sposób jak zmiennej powłoki, poprzez uŝycie = Po przypisaniu wartości naleŝy wykonać polecenie export, aby przenieść zmienną do pamięci zmiennych środowiskowych ZMIENNA=wartosc export ZMIENNA Zmienna PATH zawiera ścieŝkę poleceń, czyli listę katalogów, które są przeszukiwane kiedy nakaŝemy powłoce wykonania jakiegoś polecenia, echo $PATH Poszczególne katalogi oddzielone są od siebie znakiem : MoŜna dopisywać nowe katalogi do zmiennej PATH, dodając np. katalog ze skryptami uŝytkownika PATH=nazwa_katalogu:$PATH dodaje dany katalog na początku zmiennej PATH=$PATH:nazwa_katalogu dodaje dany katalog na końcu zmiennej 2
Wprowadzenie do skryptów powłoki Skrypt to sekwencja poleceń zapisanych w pliku Wszystkie skrypty powinny zaczynać się od wiersza #!/bin/sh oznaczającego, Ŝe polecenia z tego pliku powinny być wykonywane przez program /bin/sh # - oznaczenie komentarza x*x cudzysłów sprawia, Ŝe powłoka traktuje wpisany tekst jako całość i nie zmienia go x*x podwójny cudzysłów działa podobnie, pokazuje jednak wartości zmiennych, znajdujących się wewnątrz cudzysłowów Przykładowy skrypt: #!/bin/sh echo to jest przykładowy skrypt echo który wypisuje na ekranie dwie linijki tekstu 3
Uruchamianie skryptów W celu umoŝliwienia uŝytkownikom uruchamiania skryptów naleŝy nadać im uprawnienia do odczytu i wykonywania (bity r, x) chmod +rx [nazwa_skrytpu] pozwala na uruchamianie skryptu przez wszystkich uŝytkowników (nadaje wszystkim uprawnienia do odczytu i wykonywania) chmod 700 [nazwa_skryptu] skrypt moŝe być uruchamiany tylko przez właściciela śeby moŝna było uruchomić skrypt powinien on znajdować się w jednym z katalogów wymienionych w ścieŝce wyszukiwania MoŜna takŝe uruchomić skrypt podając jego nazwę wraz z pełną ścieŝką dostępu, np. /home/student/dokumenty/nazwa_skryptu JeŜeli uruchamiany skrypt znajduje się w aktualnym katalogu roboczym wystarczy wywołanie./nazwa_skryptu 4
Ćwiczenie 1 Napisz skrypt wyświetlający dwie poniŝsze linijki tekstu: To jest skrypt UŜytkownika Imię Nazwisko Uruchom skrypt w ten sposób aby efekt jego działania zapisany został w pliku wynik_skryptu, który będzie znajdował się na pulpicie 5
Zmienne specjalne (1) Skrypty powłoki mogą pobierać wartości z wiersza poleceń oraz wynikające z uruchamianych poleceń Zmienne $1, $2, $3... zmienne te przechowują wartości parametrów przekazywanych do skryptu Parametry moŝemy podać np. podczas uruchamiania skrytpu: nazwa_skryptu parametr1 parametr2 parametr2 parametr4 itd. Przykładowy skrypt o nazwie sk1 #!/bin/sh Echo Wartość pierwszego parametru: $1 Echo Wartość czwartego parametru: $4 Po uruchomieniu sk1 jeden dwa trzy cztery piec wypisane zostanie: Wartość pierwszego parametru: jeden Wartość czwartego parametru: cztery Instrukcja shift usuwa pierwszy parametr $1 i przesuwa kolejne o jedną pozycję do przodu, tzn., Ŝe parametr $2 staje się parametrem $1, a $3 staje się $2 itd. #!/bin/sh Echo Wartość pierwszego parametru: $1 Shift Echo Wartość drugiego parametru: $1 Shift Echo Wartość trzeciego parametru: $1 6
Zmienne specjalne (2) Zmienna $# przechowuje liczbę parametrów, które zostały przekazane do skryptu, np: #!/bin/sh Liczba parametrów przekazanych do skryptu: $# sk1 a b c d e f Liczba parametrów przekazanych do skryptu: 5 Zmienna $@ przechowuje wszystkie parametry przekazywane do skryptu i pozwala na przekazanie ich dalej, do poleceń, które uruchamiane są wewnątrz skryptu Zmienna $0 reprezentuje nazwę skryptu Zmienna $$ przechowuje identyfikator procesu powłoki Zmienna $? przechowuje kod wyjścia (exit code) ostatnio wykonywanego polecenia Kod wyjścia - wartość przekazywane przez program po zakończeniu jego działania. Wartość 0 oznacza, Ŝe program zakończył działanie bez błędów. Inny kod oznacza, Ŝe podczas wykonywania programu wystąpiły jakieś problemy 7
WyraŜenia warunkowe (1) WyraŜenia warunkowe pozwalają sprawdzania wykonania warunków. Zazwyczaj są to instrukcje if-then-else lub case Schemat działania wyraŝenia warunkowego Powłoka uruchamia poleceni znajdujące się za słowem kluczowym if JeŜeli kod wyjścia ma wartość 0 wykonywane są polecenia znajdujące się po słowie kluczowym then JeŜeli kod wyjścia był róŝny od 0 to wykonywane są polecania umieszczone po słowie kluczowym else WyraŜenie warunkowe kończy się słowem kluczowym fi Znak [ to program sprawdzający czy określony warunek jest prawdziwy (jego inna nazwa to test) #!/bin/sh if [ "$1" = nazwa ]; then echo pierwszym parametrem było słowo "nazwa" else echo w pierwszym parametrze nie było słowa "nazwa" echo ale za to było słowo '"'$1'"' fi 8
WyraŜenia warunkowe (2) Konstrukcja && ( i, and ) - powoduje uruchomienie pierwszego polecenia, a jeŝeli jego kod wyjścia ma wartość 0 (czyli program zadziałał bez błędu) uruchamiana jest kolejne polecenie nazwa_polecania1 && nazwa_polecenia2 Konstrukcje ( lub, or ) - uruchamiane jest pierwsze polecenie, a jeŝeli kod wyjściowy ma wartość róŝną od 0 (czyli wystąpił błąd podczas wykonywania polecenia), to uruchamiana jest drugie polecenie nazwa_polecania1 nazwa_polecenia2 #!/bin/sh if [ "$1" = nazwa ] [ "$1" = wartosc ]; then echo pierwszym parametrem było słowo '"'$1'"' else echo w pierwszym parametrze nie było słowa "nazwa" ani słowa "wartość" echo ale za to było słowo '"'$1'"' fi 9
Ćwiczenie 2 Utwórz skrypt, który wykona następujące czynności: 1. sprawdzi czy dwa pierwsze parametry podane przez uŝytkownika nie były takie same 2. JeŜeli warunek będzie prawdziwy (dwa pierwsze parametry będą się róŝniły) to utworzy na pulpicie dwa pliki o nazwach takich jak parametry 3. JeŜeli warunek zwróci wartość fałszu (dwa pierwsze parametry będą takie same) to wygeneruje komunikat Dwukrotnie podano tą samą wartość parametru: wartość_parametru 10
WyraŜenia warunkowe (3) testy warunków WyraŜenia warunkowe mogą zostać wykorzystane do sprawdzenia czy pliki spełniają określone warunki [ -f nazwa_pliku ] - zwraca wartość zero jeŝeli plik jest zwykłym plikiem, a nie na przykład katalogiem Umieszczenie! przed sprawdzanym warunkiem powoduje negację warunku, np. [! -f nazwa_pliku ] - zwraca wartość 0 jeŝeli plik nie jest zwykłym plikiem -a i -o to opcje operacji logicznych and i or [ -f nazwa_pliku1 -a nazwa_pliku_2 ] - sprawdza czy plik1 i plik2 są zwykłymi plikami Wybrane testy plików [ -e nazwa_pliku ] - zwraca wartość prawdy (zero), jeŝeli plik istnieje [ -s nazwa_pliku ] zwraca wartość prawdy (zero), jeŝeli plik nie jest pusty [ plik1 -nt plik2 ] - zwraca wartość prawdy jeŝeli plik1 jest nowszy niŝ plik2 [ plik 1 -ot plik2 ] - zwraca wartość prawdy jeŝeli plik1 jest starszy niŝ plik2 11
Ćwiczenie 3 Napisz skrypt, który wykona poniŝsze czynności 1) Utworzy na pulpicie plik o nazwie nazwa_uŝytkownika, do którego zapisane będą poniŝsze informacje Nazwa i grupa/y aktualnego uŝytkownika Lista plików znajdujących się w katalogu domowym uŝytkownika, wyświetlona w ten sposób by widoczne były informacje o tych plikach (data modyfikacji, uprawnienia itp.) Informacje o wielkości katalogów znajdujących się w katalogu domowym uŝytkownika Lista procesów uruchomionych przez uŝytkownika 2) Sprawdzi czy utworzony plik nie jest pusty oraz jeŝeli plik będzie pusty wygeneruje na ekranie komunikat błąd podczas wykonywania ćwiczenia a w przeciwnym wypadku komunikat plik został utworzony poprawnie 12