3. 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.
4. 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.
5. 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.
6. 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
7. 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.
8. 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
9. Wyświetlanie i pobieranie danych
• Najbardziej popularnym poleceniem służącym
do wyświetlania danych jest polecenie echo.
#!/bin/bash
echo „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
10. Słowa zastrzeżone
• ! • select
• case • then
• do • until
• done • while
• elif • {
• else • }
• esac • time
• fi • [
• for • ]
• function
• if
• in
11. Zmienne
• W skryptach powłoki możemy wykorzystywać
następujące rodzaje zmiennych:
▫ programowe
▫ specjalne
▫ środowiskowe
▫ tablicowe
12. 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
13. 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;
14. 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;
15. 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]}
16. Odwoływanie się do elementów tablicy
Skł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[*]}
17. 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:
18. 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[*]}
19. Usuwanie całych tablic
Aby 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.
20. 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
21. 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 dzwoneka"
echo "Polecenie date pokaże: `date`"
22. 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
23. 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)
24. Cytowanie - backslash
backslash 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
25.
26. Przykład 1
• Utwórz przy pomocy polecenia touch nowy plik o
nazwie pd1.
touch pd1
• Nadaj utworzonemu plikowi atrybut wykonywalności
chmod 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
27. 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
28. 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
29. Przykład 4
• Utwórz plik pd4
• Nadaj utworzonemu plikowi atrybut
wykonywalności
• Wprowadź do niego dane:
for i in 1 2 3
do
mkdir ‘dane’$i
done
• Uruchom skrypt
• Skrypt utworzy katalogi dane1, dane2 i dane3
30. Przykład 5
• Utwórz plik pd5
• Nadaj utworzonemu plikowi atrybut wykonywalności
• Wprowadź do niego dane:
for i in 1 2 3
do
mkdir ‘dane’$i
chmod a-x ‘dane’$i
done
ls $PWD - l
• Uruchom skrypt
• Skrypt nada katalogom dane1, dane2 i dane3 uprawnienia
tylko do przeglądania.