Skrypty powłoki

31
Skrypty powłoki Jacek Tomczak

description

 

Transcript of Skrypty powłoki

Page 1: Skrypty powłoki

Skrypty powłokiJacek Tomczak

Page 2: Skrypty powłoki

Agenda

•Definicje (powłoka, skrypt, bash)•Tworzenie skryptów•Uruchamianie skryptów•Zmienne•Cytowanie•Przykłady

Page 3: Skrypty powłoki

Definicje - Powłoka (shell) Powłoka (ang. shell) to pośrednik między systemem operacyjnym a użytkownikiem.

Jej zadaniem jest interpretacja komend wydawanych przez użytkownika.

Zazwyczaj komendy powłoki dają możliwość tworzenia prostych programów - skryptów.

Skrypty służą głównie zadaniom administracyjnym (operacje na plikach, katalogach), powłoka nie udostępnia bowiem zbyt bogatej arytmetyki.

Page 4: Skrypty powłoki

Definicje - skrypt

Skrypt to niekompilowany tekstowy plik wykonywalny, zawierający jakieś polecenia systemowe oraz polecenia sterujące jego wykonaniem (instrukcje, pętle itp.).

Wykonywany jest tylko i wyłącznie przez interpreter ( np. /bin/bash), który tłumaczy polecenia zawarte w skrypcie na język zrozumiały dla procesora.

Page 5: Skrypty powłoki

Definicje - Bash

•BASH (ang. Bourne Again SHell) to stworzony przez Briana Foxa i Cheta Rameya zgodny z sh interpreter poleceń, łączący w sobie zalety shella Korna (ksh) i C-shella (csh).

•BASH to najbardziej popularna powłoka używana na systemach unixowych (linuxowych), jest też skryptowym językiem programowania, umożliwiającym efektywne zarządzanie systemem.

Page 6: Skrypty powłoki

Tworzenie skryptów

•Aby utworzyć skrypt należy utworzyć w wybranym przez nas miejscu plik.

touch nazwa_pliku•Pliki w systemach Linux nie posiadają

rozszerzenia więc aby był on rozpoznawalny przez powlokę jako plik wykonywalny należy nadać mu odpowiednie uprawnienia

chmod u+x nazwa_pliku

Page 7: Skrypty powłoki

Tworzenie skryptów• Każdy skrypt powinien rozpoczynać się od dwóch linii

zawierających:

#!/bin/bash #Tu jest komentarz

• Znak # (hasz) oznacza komentarz, wszystko co znajduje się za nim w tej samej linii, jest pomijane przez interpreter.

• Pierwsza linia skryptu zaczynająca się od znaków: #! ma szczególne znaczenie - wskazuje na rodzaj shella w jakim skrypt ma być wykonany, tutaj skrypt zawsze będzie wykonywany przez interpreter poleceń /bin/bash, niezależnie od tego jakiego rodzaju powłoki w danej chwili używamy.

Page 8: Skrypty powłoki

Uruchamianie skryptów

•Jeżeli skrypt jest wykonywalny to wystarczy w wierszu poleceń wpisać polecenie:

./nazwa_skryptu•Jeżeli plik nie jest wykonywalny to należy

wprowadzić polecenie:basch nazwa_skryptu

Page 9: Skrypty powłoki

Wyświetlanie i pobieranie danych•Najbardziej popularnym poleceniem

służącym do wyświetlania danych jest polecenie echo.

#!/bin/bashecho „Witaj – właśnie napisałem skrypt”

•Natomiast poleceniem umożliwiajacym wczytanie danych jest polecenie read.

#!/bin/bash echo -n „podaj swoje imię:" read wpis

Page 10: Skrypty powłoki

Słowa zastrzeżone• ! • case • do • done • elif • else • esac • fi • for • function • if

• in • select • then • until • while • { • } • time • [ • ]

Page 11: Skrypty powłoki

Zmienne

•W skryptach powłoki możemy wykorzystywać następujące rodzaje zmiennych:▫programowe▫specjalne▫środowiskowe▫tablicowe

Page 12: Skrypty powłoki

Zmienne programowe• Zmienne programowe (program variables) –

zmienne definiowane samodzielnie przez użytkownika, np.:

zmienna=„wartość”

(pamiętaj nie może być spacji przed i po „=”)

• Do zmiennej można odwołać się przez podanie jej nazwy poprzedzonej znakiem $, np. dla zmiennej x może to wyglądać następująco:

echo $x

Page 13: Skrypty powłoki

Zmienne specjalne• Zmienne specjalne (special variables, special

parameters) – to najbardziej prywatne zmienne powłoki, są udostępniane użytkownikowi tylko do odczytu (istnieją jednak wyjątki).

• Kilka przykładów zmiennych specjalnych:▫$0 – nazwa bieżącego skryptu lub powłoki,▫$1..$9 – parametry przekazywane do skryptu

(wyjątek – użytkownik może modyfikować ten rodzaj▫zmiennych specjalnych),▫$? – kod powrotu ostatnio wykonywanego polecenia,▫$$ – PID procesu bieżącej powłoki;

Page 14: Skrypty powłoki

Zmienne środowiskowe

•Zmienne środowiskowe (environment variables) – definiują środowisko użytkownika, dostępne dla wszystkich procesów potomnych, np.:▫$HOME – ścieżka do katalogu domowego

użytkownika,▫$USER – login użytkownika,▫$HOSTNAME – nazwa hosta użytkownika,▫$OSTYPE – rodzaj systemu operacyjnego;

Page 15: Skrypty powłoki

Zmienne tablicowe• BASH pozwala na stosowanie zmiennych tablicowych

jednowymiarowych. W BASH'u nie ma maksymalnego rozmiaru tablic. Kolejne wartości zmiennej tablicowej indeksowane są przy pomocy liczb całkowitych, zaczynając od 0.

Składnia zmienna=(wartość1 wartość2 wartość3 wartośćn)

Przykład: #!/bin/bash tablica=(element1 element2 element3) echo ${tablica[0]} echo ${tablica[1]} echo ${tablica[2]}

Page 16: Skrypty powłoki

Odwoływanie się do elementów tablicySkładnia:

${nazwa_zmiennej[wskaźnik]}

• Wskaźnikiami są indexy elementów tablicy, począwszy od 0 do n oraz @, *.• Gdy odwołując się do zmiennej nie podamy wskaźnika: $

{nazwa_zmiennej} to nastąpi odwołanie do elementu tablicy o indexie 0.Jeśli wskaźnikiem będą: @ lub * to zinterpretowane zostaną jako wszystkie elementy tablicy, w przypadku gdy tablica nie zawiera żadnych elementów to zapisy:${nazwa_zmiennej[wskaźnik]} lub: ${nazwa_zmiennej[wskaźnik]} są interpretowane jako nic.

Przykład: #!/bin/bash tablica=(element1 element2 element3) echo ${tablica[*]}

Page 17: Skrypty powłoki

Dodawanie elementów do tablicy. Składnia:

nazwa_zmiennej[wskaźnik]=wartość Przykład:

#!/bin/bash tablica=(element1 element2 element3) tablica[3]=element4 echo ${tablica[@]}

Jak wyżej widać do tablicy został dodany element4 o indexie 3. Mechanizm dodawania elementów do tablicy, można wykorzystać do tworzenia tablic, gdy nie istnieje zmienna tablicowa do której dodajemy jakiś element, to BASH automatycznie ją utworzy:

Page 18: Skrypty powłoki

Usuwanie elementów tablic•Dany element tablicy usuwa się za pomocą

polecenia unset. Składnia:

unset nazwa_zmiennej[wskaźnik] Przykład:

#!/bin/bash tablica=(element1 element2 element3) echo ${tablica[@]} unset tablica[2] echo ${tablica[*]}

Page 19: Skrypty powłoki

Usuwanie całych tablicAby usunąć całą tablicę wystarczy podać jako

wskaźnik: @ lub *.

Przykałd#!/bin/bash tablica=(element1 element2 element3) unset tablica[*] echo ${tablica[@]}

Zmienna tablicowa o nazwie tablica przestała istnieć, polecenie:

echo ${tablica[@]} nie wyświetli nic.

Page 20: Skrypty powłoki

Cytowanie

•Znaki cytowania służą do usuwania interpretacji znaków specjalnych przez powłokę.

•Wyróżniamy następujące znaki cytowania: ▫cudzysłów (ang. double quote) ▫apostrof (ang. single quote) ▫odwrotny apostrof (ang. backquote) ▫backslash czyli znak maskujący

Page 21: Skrypty powłoki

Cytowanie cudzysłów " "

• Między cudzysłowami umieszcza się tekst, wartości zmiennych zawierające spacje. Cudzysłowy zachowują znaczenie specjalne trzech znaków: ▫ $ wskazuje na nazwę zmiennej, umożliwiając podstawienie jej

wartości ▫ \ znak maskujący ▫ ` ` odwrotny apostrof, umozliwia zacytowanie polecenia

• Przykład: #!/bin/bash x=2 echo "Wartość zmiennej x to $x" #wydrukuje Wartość zmiennej x to 2 echo -ne "Usłyszysz dzwonek\a" echo "Polecenie date pokaże: `date`"

Page 22: Skrypty powłoki

Cytowanie apostrof ‘’

apostrof (ang. single quote) ' ' •Wszystko co ujęte w znaki apostrofu

traktowane jest jak łańcuch tekstowy, apostrof wyłącza interpretowanie wszystkich znaków specjalnych, traktowane są jak zwykłe znaki.

Przykład: #!/bin/bash echo '$USER' #nie wypisze twojego loginu

Page 23: Skrypty powłoki

Cytowanie – odwrotny apostrof ``

odwrotny apostrof (ang. backquote) ` ` • umożliwia zacytowanie polecenia, bardzo przydatne jeśli

chce się podstawić pod zmienną wynik jakiegoś polecenia np:

Przykład: #!/bin/bash x=`ls -la $PWD` echo $x

• pokaże rezultat polecenia • Alternatywny zapis, który ma takie samo działanie

wygląda tak: #!/bin/bash echo $(ls -la $PWD)

Page 24: Skrypty powłoki

Cytowanie - backslashbackslash czyli znak maskujący \

• Jego działanie najlepiej wyjaśnić na przykładzie: chcesz by na ekranie pojawił się napis $HOME

Przykład: #!/bin/bash echo "$HOME"

• wydrukuje /home/mój_katalog• aby wyłączyć interpretacje przez powłokę tej zmiennej,

trzeba napisać: #!/bin/bash echo \$HOME

• zostanie wyświetlony napis $HOME

Page 25: Skrypty powłoki

Wybrane przykłady zastosowania skryptów

Page 26: Skrypty powłoki

Przykład 1• Utwórz przy pomocy polecenia touch nowy plik o nazwie

pd1.touch pd1

• Nadaj utworzonemu plikowi atrybut wykonywalnościchmod a+x pd1

• Edytuj go przy pomocy wybranego edytora tekstów• Wprowadź następujące polecenia:

#!/bin/bash #Tu jest komentarz. echo „właśnie uruchomiłem nowy skrypt„

• Zapisz skrypt.• Uruchom skrypt

./pd1

Page 27: Skrypty powłoki

Przykład 2• Utwórz plik pd2• Nadaj utworzonemu plikowi atrybut wykonywalności• Wprowadź następujące dane:

▫ #!/bin/bash▫ echo "to jest mój pierwszy skrypt"▫ echo "podaj swoje imie:"▫ read imie▫ echo "podaj swoje nazwisko:"▫ read nazwisko▫ echo "jeżeli nie sklamałeś nazywasz się:" ▫ echo $imie $nazwisko

• Uruchom skrypt

Page 28: Skrypty powłoki

Przykład 3

•Utwórz plik pd3•Nadaj utworzonemu plikowi atrybut

wykonywalności•Wprowadź następujące dane:

▫ #!/bin/bash▫ echo " właśnie uruchomiłeś skrypt o nazwie: " $0▫ echo " pracujesz na komputerze:" $HOSTNAME▫ echo " na którym osadzony jest system operacyjny:" $OSTYPE▫ echo " aktualnie zalogowany jest użytkownik:" $USER▫ echo " a jego katalog domowy to:" $HOME

•Uruchom skrypt

Page 29: Skrypty powłoki

Przykład 4• Utwórz plik pd4• Nadaj utworzonemu plikowi atrybut wykonywalności• Wprowadź do niego dane:

for i in 1 2 3do

mkdir ‘dane’$idone

• Uruchom skrypt• Skrypt utworzy katalogi dane1, dane2 i dane3

Page 30: Skrypty powłoki

Przykład 5• Utwórz plik pd5• Nadaj utworzonemu plikowi atrybut wykonywalności• Wprowadź do niego dane:

for i in 1 2 3do

mkdir ‘dane’$ichmod a-x ‘dane’$i

donels $PWD - l

• Uruchom skrypt• Skrypt nada katalogom dane1, dane2 i dane3 uprawnienia

tylko do przeglądania.

Page 31: Skrypty powłoki

Przykład 6• Utwórz plik pd6• Nadaj utworzonemu plikowi atrybut wykonywalności• Wprowadź do niego dane:

#!/bin/bash useradd uczen1

# tworze katalogu domowegomkdir /home/uczen1/

# ustawiam uprawnienia dla katalogu użytkownikachmod 711 /home/uczen1

# zmieniam właściciela katalogu chown uczen1:uczen1 /home/uczen1

# ustawiam hasło użytkownika (123)echo "123" | passwd --stdin uczen1

• Uruchom skrypt• Skrypt utworzy nowego użytkownika – uczeń1.