SlideShare a Scribd company logo
1 of 31
Skrypty powłoki
Jacek 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/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
Słowa zastrzeżone
•   !           •   select
•   case        •   then
•   do          •   until
•   done        •   while
•   elif        •   {
•   else        •   }
•   esac        •   time
•   fi          •   [
•   for         •   ]
•   function
•   if
•   in
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 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[*]}
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 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.
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 dzwoneka"
     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 - 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
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
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 3
     do
            mkdir ‘dane’$i
     done

• 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 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.
Przykład 6
• Utwórz plik pd6
• Nadaj utworzonemu plikowi atrybut wykonywalności
• Wprowadź do niego dane:
         #!/bin/bash
           useradd uczen1
         # tworze katalogu domowego
           mkdir /home/uczen1/
         # ustawiam uprawnienia dla katalogu użytkownika
           chmod 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.

More Related Content

What's hot

Netmap presentation
Netmap presentationNetmap presentation
Netmap presentationAmir Razmjou
 
linux file sysytem& input and output
linux file sysytem& input and outputlinux file sysytem& input and output
linux file sysytem& input and outputMythiliA5
 
Linux : Booting and runlevels
Linux : Booting and runlevelsLinux : Booting and runlevels
Linux : Booting and runlevelsJohn Ombagi
 
Simon Laws – Apache Flink Cluster Deployment on Docker and Docker-Compose
Simon Laws – Apache Flink Cluster Deployment on Docker and Docker-ComposeSimon Laws – Apache Flink Cluster Deployment on Docker and Docker-Compose
Simon Laws – Apache Flink Cluster Deployment on Docker and Docker-ComposeFlink Forward
 
Course 102: Lecture 6: Seeking Help
Course 102: Lecture 6: Seeking HelpCourse 102: Lecture 6: Seeking Help
Course 102: Lecture 6: Seeking HelpAhmed El-Arabawy
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for LinuxYu-Hsin Hung
 
C11/C++11 Memory model. What is it, and why?
C11/C++11 Memory model. What is it, and why?C11/C++11 Memory model. What is it, and why?
C11/C++11 Memory model. What is it, and why?Mikael Rosbacke
 
Debugging Android Native Library
Debugging Android Native LibraryDebugging Android Native Library
Debugging Android Native LibraryNSConclave
 
Net App Unified Storage Architecture
Net App Unified Storage ArchitectureNet App Unified Storage Architecture
Net App Unified Storage Architecturenburgett
 
Evolution of Android Update Principles
Evolution of Android Update PrinciplesEvolution of Android Update Principles
Evolution of Android Update PrinciplesGlobalLogic Ukraine
 
Course 102: Lecture 7: Simple Utilities
Course 102: Lecture 7: Simple Utilities Course 102: Lecture 7: Simple Utilities
Course 102: Lecture 7: Simple Utilities Ahmed El-Arabawy
 
Linux basic commands with examples
Linux basic commands with examplesLinux basic commands with examples
Linux basic commands with examplesabclearnn
 
第12回オペレーティングシステム
第12回オペレーティングシステム第12回オペレーティングシステム
第12回オペレーティングシステム眞樹 冨澤
 

What's hot (20)

Netmap presentation
Netmap presentationNetmap presentation
Netmap presentation
 
Basic 50 linus command
Basic 50 linus commandBasic 50 linus command
Basic 50 linus command
 
Linux training
Linux trainingLinux training
Linux training
 
Basic linux commands
Basic linux commandsBasic linux commands
Basic linux commands
 
Using strace
Using straceUsing strace
Using strace
 
linux file sysytem& input and output
linux file sysytem& input and outputlinux file sysytem& input and output
linux file sysytem& input and output
 
Linux : Booting and runlevels
Linux : Booting and runlevelsLinux : Booting and runlevels
Linux : Booting and runlevels
 
Simon Laws – Apache Flink Cluster Deployment on Docker and Docker-Compose
Simon Laws – Apache Flink Cluster Deployment on Docker and Docker-ComposeSimon Laws – Apache Flink Cluster Deployment on Docker and Docker-Compose
Simon Laws – Apache Flink Cluster Deployment on Docker and Docker-Compose
 
RPM (LINUX)
RPM (LINUX)RPM (LINUX)
RPM (LINUX)
 
Course 102: Lecture 6: Seeking Help
Course 102: Lecture 6: Seeking HelpCourse 102: Lecture 6: Seeking Help
Course 102: Lecture 6: Seeking Help
 
Android Binder IPC for Linux
Android Binder IPC for LinuxAndroid Binder IPC for Linux
Android Binder IPC for Linux
 
C11/C++11 Memory model. What is it, and why?
C11/C++11 Memory model. What is it, and why?C11/C++11 Memory model. What is it, and why?
C11/C++11 Memory model. What is it, and why?
 
Debugging Android Native Library
Debugging Android Native LibraryDebugging Android Native Library
Debugging Android Native Library
 
Net App Unified Storage Architecture
Net App Unified Storage ArchitectureNet App Unified Storage Architecture
Net App Unified Storage Architecture
 
Evolution of Android Update Principles
Evolution of Android Update PrinciplesEvolution of Android Update Principles
Evolution of Android Update Principles
 
Course 102: Lecture 7: Simple Utilities
Course 102: Lecture 7: Simple Utilities Course 102: Lecture 7: Simple Utilities
Course 102: Lecture 7: Simple Utilities
 
Memory management
Memory managementMemory management
Memory management
 
Linux basic commands with examples
Linux basic commands with examplesLinux basic commands with examples
Linux basic commands with examples
 
第12回オペレーティングシステム
第12回オペレーティングシステム第12回オペレーティングシステム
第12回オペレーティングシステム
 
Gcc porting
Gcc portingGcc porting
Gcc porting
 

Similar to Skrypty powłoki

Bash 1 ----- wykład2i3
Bash 1   -----     wykład2i3Bash 1   -----     wykład2i3
Bash 1 ----- wykład2i3kkk112
 
Linux command line - Przewodnik
Linux command line - PrzewodnikLinux command line - Przewodnik
Linux command line - PrzewodnikOskar Wycislak
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogoKamil Monticolo
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Codesushi.co (CODESUSHI LLC)
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
Bash 2 ----- wykład3i4
Bash 2   -----      wykład3i4Bash 2   -----      wykład3i4
Bash 2 ----- wykład3i4kkk112
 
Przekierowanie strumienia danych
Przekierowanie strumienia danychPrzekierowanie strumienia danych
Przekierowanie strumienia danychJacek Tomczak
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)adamhmetal
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpadamhmetal
 
PB.NET II (System.IO)
PB.NET II (System.IO)PB.NET II (System.IO)
PB.NET II (System.IO)guestca2f46d
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceDawid Urbański
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaMaciej Ziarko
 
Erlang
ErlangErlang
Erlangkonryd
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 

Similar to Skrypty powłoki (20)

Bash 1 ----- wykład2i3
Bash 1   -----     wykład2i3Bash 1   -----     wykład2i3
Bash 1 ----- wykład2i3
 
Linux command line - Przewodnik
Linux command line - PrzewodnikLinux command line - Przewodnik
Linux command line - Przewodnik
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogo
 
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
Wyszukiwanie
WyszukiwanieWyszukiwanie
Wyszukiwanie
 
Bash 2 ----- wykład3i4
Bash 2   -----      wykład3i4Bash 2   -----      wykład3i4
Bash 2 ----- wykład3i4
 
Przekierowanie strumienia danych
Przekierowanie strumienia danychPrzekierowanie strumienia danych
Przekierowanie strumienia danych
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty php
 
Prezentacja php3
Prezentacja   php3Prezentacja   php3
Prezentacja php3
 
Podstawy PHP
Podstawy PHPPodstawy PHP
Podstawy PHP
 
PB.NET II (System.IO)
PB.NET II (System.IO)PB.NET II (System.IO)
PB.NET II (System.IO)
 
WordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyceWordUp Trójmiasto - Sage 9 w praktyce
WordUp Trójmiasto - Sage 9 w praktyce
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
Programowanie
ProgramowanieProgramowanie
Programowanie
 
Programowanie
ProgramowanieProgramowanie
Programowanie
 
Erlang
ErlangErlang
Erlang
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 

Skrypty powłoki

  • 2. Agenda • Definicje (powłoka, skrypt, bash) • Tworzenie skryptów • Uruchamianie skryptów • Zmienne • Cytowanie • Przykłady
  • 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.
  • 31. Przykład 6 • Utwórz plik pd6 • Nadaj utworzonemu plikowi atrybut wykonywalności • Wprowadź do niego dane: #!/bin/bash useradd uczen1 # tworze katalogu domowego mkdir /home/uczen1/ # ustawiam uprawnienia dla katalogu użytkownika chmod 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.