Skrypty powłoki
-
Upload
jacek-tomczak -
Category
Documents
-
view
853 -
download
1
description
Transcript of Skrypty powłoki
Skrypty powłokiJacek Tomczak
Agenda
•Definicje (powłoka, skrypt, bash)•Tworzenie skryptów•Uruchamianie skryptów•Zmienne•Cytowanie•Przykłady
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.
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.
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.
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
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.
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
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
Słowa zastrzeżone• ! • case • do • done • elif • else • esac • fi • for • function • if
• in • select • then • until • while • { • } • time • [ • ]
Zmienne
•W skryptach powłoki możemy wykorzystywać następujące rodzaje zmiennych:▫programowe▫specjalne▫środowiskowe▫tablicowe
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
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;
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;
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]}
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[*]}
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:
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[*]}
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.
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
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`"
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
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)
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
Wybrane przykłady zastosowania skryptów
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
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
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
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
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.
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.