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

Course 102: Lecture 16: Process Management (Part 2)
Course 102: Lecture 16: Process Management (Part 2) Course 102: Lecture 16: Process Management (Part 2)
Course 102: Lecture 16: Process Management (Part 2) Ahmed El-Arabawy
 
Permisos en Linux
Permisos en LinuxPermisos en Linux
Permisos en LinuxPablo Macon
 
Linux basics part 1
Linux basics part 1Linux basics part 1
Linux basics part 1Lilesh Pathe
 
The basic concept of Linux FIleSystem
The basic concept of Linux FIleSystemThe basic concept of Linux FIleSystem
The basic concept of Linux FIleSystemHungWei Chiu
 
Intro to Linux Shell Scripting
Intro to Linux Shell ScriptingIntro to Linux Shell Scripting
Intro to Linux Shell Scriptingvceder
 
Introduction to Linux
Introduction to Linux Introduction to Linux
Introduction to Linux Harish R
 
Course 102: Lecture 18: Process Life Cycle
Course 102: Lecture 18: Process Life CycleCourse 102: Lecture 18: Process Life Cycle
Course 102: Lecture 18: Process Life CycleAhmed El-Arabawy
 
Linux presentation
Linux presentationLinux presentation
Linux presentationNikhil Jain
 
Course 102: Lecture 8: Composite Commands
Course 102: Lecture 8: Composite Commands Course 102: Lecture 8: Composite Commands
Course 102: Lecture 8: Composite Commands Ahmed El-Arabawy
 
An Introduction to Linux
An Introduction to LinuxAn Introduction to Linux
An Introduction to Linuxanandvaidya
 
Linux kernel Architecture and Properties
Linux kernel Architecture and PropertiesLinux kernel Architecture and Properties
Linux kernel Architecture and PropertiesSaadi Rahman
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash DaeMyung Kang
 
Improve speed and performance of informix 11.xx part 2
Improve speed and performance of informix 11.xx   part 2Improve speed and performance of informix 11.xx   part 2
Improve speed and performance of informix 11.xx part 2am_prasanna
 
Unix OS & Commands
Unix OS & CommandsUnix OS & Commands
Unix OS & CommandsMohit Belwal
 
Couse SE Le système d’exploitation Linux - IPSET.pdf
Couse SE Le système d’exploitation Linux - IPSET.pdfCouse SE Le système d’exploitation Linux - IPSET.pdf
Couse SE Le système d’exploitation Linux - IPSET.pdfMedBechir
 
C++ shared libraries and loading
C++ shared libraries and loadingC++ shared libraries and loading
C++ shared libraries and loadingRahul Jamwal
 
Bash Shell Scripting
Bash Shell ScriptingBash Shell Scripting
Bash Shell ScriptingRaghu nath
 

What's hot (20)

Linux and DNS Server
Linux and DNS ServerLinux and DNS Server
Linux and DNS Server
 
Course 102: Lecture 16: Process Management (Part 2)
Course 102: Lecture 16: Process Management (Part 2) Course 102: Lecture 16: Process Management (Part 2)
Course 102: Lecture 16: Process Management (Part 2)
 
Permisos en Linux
Permisos en LinuxPermisos en Linux
Permisos en Linux
 
Linux basics part 1
Linux basics part 1Linux basics part 1
Linux basics part 1
 
The basic concept of Linux FIleSystem
The basic concept of Linux FIleSystemThe basic concept of Linux FIleSystem
The basic concept of Linux FIleSystem
 
Linux
LinuxLinux
Linux
 
Ubuntu – Linux Useful Commands
Ubuntu – Linux Useful CommandsUbuntu – Linux Useful Commands
Ubuntu – Linux Useful Commands
 
Intro to Linux Shell Scripting
Intro to Linux Shell ScriptingIntro to Linux Shell Scripting
Intro to Linux Shell Scripting
 
Introduction to Linux
Introduction to Linux Introduction to Linux
Introduction to Linux
 
Course 102: Lecture 18: Process Life Cycle
Course 102: Lecture 18: Process Life CycleCourse 102: Lecture 18: Process Life Cycle
Course 102: Lecture 18: Process Life Cycle
 
Linux presentation
Linux presentationLinux presentation
Linux presentation
 
Course 102: Lecture 8: Composite Commands
Course 102: Lecture 8: Composite Commands Course 102: Lecture 8: Composite Commands
Course 102: Lecture 8: Composite Commands
 
An Introduction to Linux
An Introduction to LinuxAn Introduction to Linux
An Introduction to Linux
 
Linux kernel Architecture and Properties
Linux kernel Architecture and PropertiesLinux kernel Architecture and Properties
Linux kernel Architecture and Properties
 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
 
Improve speed and performance of informix 11.xx part 2
Improve speed and performance of informix 11.xx   part 2Improve speed and performance of informix 11.xx   part 2
Improve speed and performance of informix 11.xx part 2
 
Unix OS & Commands
Unix OS & CommandsUnix OS & Commands
Unix OS & Commands
 
Couse SE Le système d’exploitation Linux - IPSET.pdf
Couse SE Le système d’exploitation Linux - IPSET.pdfCouse SE Le système d’exploitation Linux - IPSET.pdf
Couse SE Le système d’exploitation Linux - IPSET.pdf
 
C++ shared libraries and loading
C++ shared libraries and loadingC++ shared libraries and loading
C++ shared libraries and loading
 
Bash Shell Scripting
Bash Shell ScriptingBash Shell Scripting
Bash Shell Scripting
 

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
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpadamhmetal
 
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
 
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
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty php
 
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)
 
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.