1 / 37

Bash

Bash. Bourne Again SHell. Co to jest bash?. bash – powłoka systemowa UNIX napisana dla projektu GNU. Nazwa jest akronimem od Bourne-Again Shell (ang. znowu powłoka Bourne'a ). Jest to jedna z najpopularniejszych powłok systemów

tamar
Télécharger la présentation

Bash

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bash Bourne Again SHell

  2. Co to jest bash? bash – powłoka systemowa UNIX napisana dla projektu GNU. Nazwa jest akronimem od Bourne-Again Shell (ang. znowu powłoka Bourne'a). Jest to jedna z najpopularniejszych powłok systemów uniksowych. Wywodzi się od powłoki Bourne'a sh, która była jedną z pierwszych i najważniejszych powłok systemu UNIX, i zawiera pomysły zawarte w powłokach Korna i csh. Pierwotna powłoka Bourne'a była tworzona przez Stephena Bourne'a. Bash był pisany głównie przez Briana Foxa i Cheta Rameya w roku 1987. Bash jest domyślną powłoką w większości dystrybucji systemu GNU/Linux oraz w systemie Mac OS X w wersji 10.4 Tiger. Istnieją także wersje dla większości Systemów Unixowych. Bash jest także domyślną powłoką w środowisku Cygwin dla systemów Win32. Program jest rozprowadzany na licencji GPL.

  3. Podstawy #!/bin/bash #Tu jest komentarz. echo "Hello world" #! – wskazuje rodzaj powłoki w jakiej skrypt ma być wykonany, ten przykładowy będzie wykonywany przez interpreter poleceń /bin/bashniezależnie od tego jakiego rodzaju powłoki w danej chwili używamy. # – oznacza komentarz, wszystko co będzie stało za tym znakiem samej linii, jest pomijane przez interpreter echo "Hello world" – Wydrukuje na standardowym wyjściu

  4. Uruchamianie skryptu Aby móc uruchomić skrypt należy mu nadać atrybut wykonywalności za pomocą polecenia: chmod +x naszskrypt Jeśli katalog bieżący w którym znajduje się skrypt nie jest dopisany do zmiennej PATH, to nasz skrypt możemy uruchomić w ten sposób: ./naszskrypt

  5. Polecenie echo Składnia: #!/bin/bash echo -ne "jakiś napis"# -ne to parametry formatujące Można też pisać do pliku. W tym wypadku echo wydrukuje tekst do pliku, ale zmaże całą jego wcześniejszą zawartość, jeśli plik podany na standardowym wyjściu nie istnieje, zostanie utworzony: echo "jakiś napis" > plik Tutaj napis zostanie dopisany na końcu pliku, nie zmaże jego wcześniejszej zawartości: echo "jakiś napis" >> plik

  6. Parametry echo • \a czyli alert, usłyszysz dzwonek • \b backspace • \c pomija znak kończący nowej linii • \f escape • \n form feed czyli wysuw strony • \r znak nowej linii • \t tabulacja pozioma • \v tabulacja pionowa • \\ backslash • \nnn znak, którego kod ASCII ma wartość ósemkowo • \xnnn znak, którego kod ASCII ma wartość szesnastkowo

  7. Słowa zastrzeżone ! case dodone elifelse esacfi forfunction ifin selectthen untilwhile {} [] time

  8. Cytowanie Znaki cytowania służą do usuwania interpretacji znaków specjalnych przez powłokę. Wyróżniamy nastepujące znaki cytowania: • 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, umożliwia 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`"

  9. apostrof ' ' • 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 • odwrotny apostrof ` ` • umożliwia zacytowanie polecenia, bardzo przydatne jeśli chce się • podstawić pod zmienną wynik jakiegoś polecenia • 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)

  10. backslash czyli znak maskujący \ Jego • działanie najlepiej wyjaśnić na przykładzie • Skryptu wymuszającego pojawienie się • napisu $HOME • Przykład: • echo "$HOME"#wydrukuje /home/ja • aby wyłączyć interpretacje przez powłokę tej • zmiennej, trzeba napisać: • echo \$HOME#i jest napis $HOME

  11. Zmienne programowe To zmienne definiowane samodzielnie przez użytkownika. nazwa_zmiennej="wartość" Na przykład: x="napis" Na co należy uważać? Nie może być spacji po obu stronach znaku równości! Do zmiennej odwołujemy się poprzez podanie jej nazwy poprzedzonej znakiem $ i tak dla zmiennej x może to wyglądać następująco: echo $x

  12. Pod zmienną możemy podstawić wynik jakiegoś • polecenia, można to zrobić na dwa sposoby: • 1) Poprzez użycie odwrotnych apostrofów – • `polecenie` • Przykład: • #!/bin/bash • GDZIE_JESTEM=`pwd` • echo "Jestem w katalogu $GDZIE_JESTEM„ • Wartością zmiennej GDZIE_JESTEM jest wynik • działania polecenia pwd, które wypisze nazwę • katalogu w jakim się w danej chwili znajdujemy.

  13. 2) Za pomocą rozwijania zawartości • nawiasów: $(polecenie) • Przykład: • #!/bin/bash • GDZIE_JESTEM=$(pwd) • echo "Jestem w katalogu $GDZIE_JESTEM"

  14. Zmienne specjalne To najbardziej prywatne zmienne powłoki,są udostępniane użytkownikowi tylko doodczytu (są wyjątki). Oto kilka przykładów: 1) $0 nazwa bieżącego skryptu lub powłoki #!/bin/bash echo "$0"#Polecenie pokaże nazwę naszego skryptu. 2)$1, $2 … $9 Parametry przekazywane do skryptu (wyjątek, użytkownik może modyfikować ten rodzaj zmiennych specjalnych. #!/bin/bash echo "$1 $2 $3" Jeśli wywołamy skrypt z jakimiś parametrami to przypisane zostaną zmiennym: od $1 do $9.

  15. 3)$@ • Pokaże wszystkie parametry przekazywane do skryptu, • równoważne $1, $2…$9. Jeśli nie podane są żadne parametry • $@ interpretowana jest jako nic. • Przykład: • #!/bin/bash echo "Skrypt uruchomiono z parametrami: $@" • Po wywołaniu skrypty zawierające powyższą linijkę jakimiś • parametrami, np.: • ./plik -a d • Otrzymamy następujący efekt: • Skrypt uruchomiono z parametrami -a d

  16. 4) $? • kod powrotu ostatnio wykonywanego polecenia • 5) $$ • PID procesu bieżącej powłoki

  17. Zmienne środowiskowe Definiują środowisko użytkownika, dostępne dla wszystkich procesów potomnych. Można je podzielić na: • globalne - widoczne w każdym podshellu • lokalne - widoczne tylko dla tego shella w którym został ustawione Inicjacja zmiennych globalnych: export nazwa_zmiennej= " wartosc„ Samo polecenie export powoduje uzyskanie listy wszystkich zmiennych globalnych. Na tej liście przed nazwą każdej zmiennej znajduje sięzapis: declare-x czyli wewnętrzne polecenie BASH-a, służące do definiowania zmiennych i nadawania im atrybutów. -x to atrybut eksportu (czyli samo co polecenie export). Niektóre przykłady zmiennych środowiskowych: • $HOME - ścieżka do twojego katalogu domowego • $USER - twój login • $HOSTNAME -nazwa twojego hosta • $OSTYPE -rodzaj systemu operacyjnego

  18. Zmienne tablicowe BASH pozwala na stosowanie zmiennych tablicowych jednowymiarowych. Przechowują one listę jakichś wartości (rozdzielonych spacjami). 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)

  19. Składnia: ${nazwa_zmiennej[wskaźnik]} Przykład: #!/bin/bash tablica=(element1 element2 element3) echo ${tablica[*]} #spowoduje wyświetlenie wszystkichelementów tablicy echo ${#tablica[0]} #wyświetli długość danego elementu tablicy echo ${#tablica[@]} #wyświetli ilość elementów tablicy Inne schematy składniowe: Dodawanie elementów tablicy nazwa_zmiennej[wskaźnik]=wartość Usuwanie elementów tablicy: unset nazwa_zmiennej[wskaźnik] Usuniecie całej zawartości tablicy: unset tablica[*]

  20. Strumienie danych Każdy uruchomiony w Linuxie proces skądś pobiera dane, gdzieś wysyła wyniki swojego działania i komunikaty o błędach. Tak więc procesowi przypisane są trzy strumienie danych: 1) stdin (ang. standard input) czyli standardowe wejście, skąd proces pobiera dane, domyślnie jest to klawiatura 2) stdout (ang. standard otuput) to standardowe wyjście, gdzie wysyłany jest wynik działania procesu, domyślnie to ekran 3) stderr (ang. standard error) standardowe wyjście błędów, tam trafiają wszystkie komunikaty o błędach, domyślnie ekran BASH identyfikuje je za pomocą przyporządkowanych im liczb całkowitych (od 0 do 2) tak zwanych deskryptorów plików: • 0 to plik z którego proces pobiera dane stdin • 1 to plik do którego proces pisze wyniki swojego działania stdout • 2 to plik do którego trafiają komunikaty o błędach stderr Zamiast klawiatury jako standardowe wejście można otworzyć plik następującą komendą: < plik. Podobnie można uczynić z wyjściem za pomocą komend: > plik - zapis do pliku, powodujący usunięcie wcześniejszych danych lub >> plik -dopisanie danych na końcu pliku

  21. Instrukcja warunkowa if Składnia: if [warunekA] then polecenie1 elif [warunekB] polecenie2 elif [warunekC] polecenie3 else polecenie4 fi Warunek ma postać [ wyrażenie1 operator wyrażenie2 ]

  22. Instrukcja case Pozwala na dokonanie wyboru spośród kilku wzorców. Składnia: case zmienna in "wzorzec1") polecenie1 ;; "wzorzec2") polecenie2 ;; "wzorzec3") polecenie3 ;; *) polecenie_domyślne esac

  23. Przykłady operatorów • -a plik istnieje • -b plik istnieje i jest blokowym plikiem specjalnym • - plik istnieje i jest plikiem znakowym • -e plik istnieje • -h plik istnieje i jest linkiem symbolicznym • = sprawdza czy wyrażenia są równe • != sprawdza czy wyrażenia są różne • -n wyrażenie ma długość większą niż 0 • -d wyrażenie istnieje i jest katalogiem • -z wyrażenie ma zerową długość • -r można czytać plik • -w można zapisywać do pliku • -x można plik wykonać • -f plik istnieje i jest plikiem zwykłym • -p plik jest łączem nazwanym • -N plik istnieje i był zmieniany od czasu jego ostatniego odczytu • plik1 -nt plik2 plik1 jest nowszy od pliku2 • plik1 -ot plik2 plik1 jest starszy od pliku2 • -lt mniejsze niż • -gt większe niż • -ge większe lub równe • -le mniejsze lub równe

  24. Pętla for Wykonuje polecenia zawarte wewnątrz pętli, na każdym składniku listy Składnia: for zmienna in lista do polecenie done Przykład – zmiana nazw plików pisaneych DUZYMI literami na pisane małymi literami: #!/bin/bash for nazwa in * do mv $nazwa `echo $nazwa tr '[A-Z]' '[a-z]'` done

  25. Pętla select Generuje z listy słów proste ponumerowane menu, każdej pozycji odpowiada kolejna liczba od 1 wzwyż. Poniżej menu znajduje się znak zachęty gdzie wpisujemy cyfrę odpowiadającą wybranej pozycji. To co wpisaliśmy zachowywane jest w zmiennej REPLY Pętla działa dotąd dopóki nie wykonane zostaje polecenie break lub return Składnia: select zmienna in lista do polecenie done

  26. Przykład – instrukcja case wewnątrz pętli: • #!/bin/bash • echo "Co wybierasz?" • select y in X Y Z Quit • do • case $y in • "X") echo "Wybrałeś X" ;; • "Y") echo "Wybrałeś Y" ;; • "Z") echo "Wybrałeś Z" ;; • "Quit") exit ;; • *) echo "Nic nie wybrałeś" • esac • break • done • Wyświetli: • Co wybierasz? • 1) X • 2) Y • 3) Z • 4) Quit • #?

  27. Pętla while Sprawdza, czy warunek jest prawdziwy, jeśli tak – wykonywane są polecenia wewnątrz pętli Składnia: while warunek do polecenie done Przykład: #!/bin/bash x=1; while [ $x -le 10 ]; do echo "Napis pojawił się po raz: $x" x=$[x + 1] done

  28. Pętla until • Sprawdza czy warunek jest prawdziwy, gdy jest fałszywy wykonywane są polecenia wewnątrz pętli. • Pętla until kończy swoje działanie w momencie gdy warunek stanie się prawdziwy. • Składnia: • until warunek • do • polecenie • done

  29. Pobieranie danych – polecenie read • Składnia: • read -opcje nazwa_zmiennej • Można przypisać wartości kilku zmiennym: • read zmienna1 zmienna2 • Opcje: • -p - wyświetli opis tego, co należy wprowadzić, np: • read -p "Wprowadź coś: " zmienna • -a - kolejne wartości rozdzielane przez znak spacji będą zapisane w zmiennej tablicowej • -e - można nie podawać nazwy zmiennej,wprowadzony tekst trafi do $REPLY • read -e

  30. Funkcje Stosuje się je gdy w skrypcie powtarza się jakaś grupa poleceń. Do danej funkcji odwołujemy się podając jej nazwę, a wykonane zostanie wszystko co wpisaliśmy między nawiasy { } Składnia: function nazwa_funkcji { polecenie1 polecenie2 } Funkcje mogą się znajdować w oddzielnym pliku, aby wywołać taką funkcję należy wpisać: . ~/plik_z_funkcjami nazwa_funkcji

  31. Obliczenia arytmetyczne Składnia: $((wyrażenie))lub$[wyrażenie] Przykład: #!/bin/bash echo $((8/2)) wynik=$[4*5/2] echo "$wynik" Obliczenia wykonywane są na liczbach całkowitych. Inny sposób – polecenie let: #!/bin/bash liczba1=5 liczba2=6 let wynik=liczba1*liczba2 echo $wynik

  32. Okna dialogowe Składnia: dialog opcje rodzaj_okna Rodzaje okien dialogowych: yesno wybór między tak lub nie menu pokazuje menu, można wybrać tylko jeden element checklist pokazuje menu, można wybrać wiele elementów radiolist pokazuje menu, można wybrać tylko jeden element inputbox wpisuje się do niego dane msgbox wyświetla komunikat infobox informuje o stanie operacji textbox wyswietla zawartość pliku tekstowego gauge pokazuje miarkę Opcje: --clearczyści ekran --titleTytuł, na górze okna dialogowego. --backtitlePodtytuł, w tle okna dialogowego, znajduje się w lewym górnym rogu ekranu.

  33. Okno yesno • Składnia: • --yesno tekst wysokość szerokość • Przykład: • #!/bin/bash • dialog --title "Okno yesno" \ • --backtitle "Tytuł w tle" \ • --yesno "Wybierz tak lub nie." 5 30

  34. Okno menu • Składnia: • --menu tekst wysokość szerokość wysokość_menu element opis • Przykład: • #!/bin/bash • dialog --title "Okno menu" \ • --menu "Menu" 9 50 3 \ • 1 jeden \ • 2 dwa \ • 3 trzy \ • 4 cztery

  35. Okno checklist • Składnia: • --checklist tekst wysokość szerokość wysokość_listy • Przykład: • #!/bin/bash • dialog --clear --separate-output --title "Okno checklist" \ • --checklist \ • "Tu można zaznaczać wiele wpisów naraz:" 10 70 4 \ • "1" "pierwszy element" "off" \ • "2" "drugi element" "off" \ • "3" "trzeci element" "off" \ • "4" "tu zaznaczone domyślnie" "on" \ • 2>/tmp/input.$$ • echo `cat /tmp/input.$$`

  36. Okno radiolist To samo co checklist, ale można wybrać jeden element Składnia: --radiolist tekst wysokość szerokość wysokość_listy

  37. Okno inputbox • Składnia: • --inputbox tekst wysokość szerokość • Przykład: • #!/bin/bash • dialog --title "Okno inputbox" \ • --inputbox "Pobieranie danych od użytkownika" 8 40 "Tu wpisz dane" • Exit Status - $? • 0 OK • 1 Cancel • 255 Escape

More Related