Bash - wprowadzenie Bash - wprowadzenie 1/39
Bash - wprowadzenie 2/39 Czym jest bash? Rysunek : Zadanie powłoki to ukrycie wywołań systemowych
Bash - wprowadzenie 3/39 Czym jest bash? Przykład polecenia: $ sort plik_z_danymi > plik_z_danymi.sorted Czynności powłoki: podział polecenia na słowa znaczenie poszczególnych słów ustawienie odpowiednich strumieni I/O odnalezienie komendy sort i uruchomienie jej z odpowiednimi argumentami
Bash - wprowadzenie 4/39 Do czego się przydaje? kompilacja, budowanie aplikacji, przetwarzanie plików (tworzenie, usuwanie, szukanie, itp.), prosta obróbka (np. tekstowa) plików, administracja systemem (np. konfiguracja, uruchamianie demonów), i inne
Bash - wprowadzenie 5/39 Do czego się nie przydaje? zadań trudnych obliczeniowo, wymagających szybkiego działania, operacji skomplikowanych algorytmicznie lub matematycznie, operacji niskopoziomowych, jak dostęp do sprzętu.
Bash - wprowadzenie 6/39 Przeszukiwanie dokumentacji man, np. man sh-utils info polecenie powłoki help
Bash - wprowadzenie 7/39 Przydatne polecenia narzędzie cat tac grep sort echo wc find head tail date paste cut przeznaczenie przekazuje wejście do wyjścia przekazuje wejście do wyjścia wyszukuje ciąg znaków w wejściu sortowanie linii wejścia wypisuje na wyjście tekst podany jako argument zlicza liczbę słów wyszukuje pliki spełniające zadane kryterium wypisuje pierwsze 10 linii tekstu wypisuje ostatnich 10 linii tekstu aktualna data łączy pliki linia po linii wypisuje wybrane części z każdego pliku
Bash - wprowadzenie 8/39 Przykłady $ cat plik.txt wyraz linia rzeczownik $ sort plik.txt linia rzeczownik wyraz $ head -1 plik.txt wyraz $ tail -1 plik.txt rzeczownik
$ echo "Witaj\nswiecie" Witaj\nswiecie $ echo -e "Witaj\nswiecie" Witaj swiecie Bash - wprowadzenie 9/39
Bash - wprowadzenie 10/39 $ find. -name "plik.txt"./plik.txt $ date +%T 10:15:30 $ grep lin plik.txt linia $ paste plik.txt plik.txt wyraz wyraz linia linia rzeczownik rzeczownik $ cut -f 1 plik.txt wyraz linia rzeczownik
Bash - wprowadzenie 11/39 Przekierowanie wejścia-wyjścia Każdy program ma skojarzone z nim strumienie: nr nazwa strumienia 1 standardowe wejście 2 standardowe wyjście 3 standardowe wyjście diagnostyczne (strumień błędów) Sposób przekierowywania strumieni Symbol Znaczenie < plik podstawienie pod standardowe wejścia pliku > plik wypisywanie wyjścia do pliku; jeśli plik istniał wcześniej to jest nadpisywany >> plik wypisywanie wyjścia do pliku; jeśli plik istniał wcześniej to wyjście jest dopisywane na jego końcu
Bash - wprowadzenie 12/39 Potoki Gdy połączymy dwa programy znakiem, standardowe wyjście pierwszego programu będzie dostarczone w standardowym wejściu drugiego programu Przykład $ ls -t head -1 plik.txt
Bash - wprowadzenie 13/39 Wzorce dopasowywania nazw plików W argumentach polecenia, gdy odwołujemy się do plików, możemy używać wzorców do określenia o jakie pliki nam chodzi. Służą do tego znaki: * dowolny ciąg znaków (być może pusty),? dokładnie jeden dowolny znak, [set] dowolny znak ze zbioru, [!set] dowolny znak nie występujący w zbiorze.
Bash - wprowadzenie 14/39 Wzorce dopasowywania nazw plików przykłady $ touch a b ab abcd bbdd $ ls a ab abcd b bbdd $ ls? a b $ ls b* b bbdd $ ls *b* ab abcd b bbdd $ ls *b?* abcd bbdd $ ls?b?d abcd bbdd $ ls a[ab]* ab abcd
Bash - wprowadzenie 15/39 Znaki specjalne, apostrofy, cudzysłowy Backslash (\) Anuluje specjalne znaczenie znaku: $ echo \aa\*\?\ \<\>\\ aa*? <>\ Apostrof ( ) Para anuluje specjalne znaczenie znaków: $ echo aa*? <>\ aa*? <>\ $ echo \aa\*\?\ \<\>\\ \aa\*\?\ \<\>\\
Bash - wprowadzenie 16/39 Znaki specjalne, apostrofy, cudzysłowy Cudzysłów ( ) Anuluje specjalne znaczenie znaków, z wyjątkiem $ \ : $ echo "aa*? <>\\" aa*? <>\
Bash - wprowadzenie 17/39 Znaki specjalne bash znak opis katalog domowy użytkownika # komentarz; wszystko po tym znaku jest ignorowane ; umożliwia umieszczenie wielu poleceń w linii
Bash - wprowadzenie 18/39 Zmienne $ zm=wart $ echo $zm wart $ echo zm zm $ zm=słowo1 słowo2 bash: słowo2: command not found $ zm="słowo1 słowo2" $ echo $zm słowo1 słowo2
Bash - wprowadzenie 19/39 Zmienne i podwójny cudzysłów $ zm=wart $ echo $zm wart $ echo "Wartość zmiennej \$zm to $zm" Wartość zmiennej $zm to wart
Bash - wprowadzenie 20/39 Podstawianie wyników innych poleceń Sposób 1. $ echo ls ls $ echo ls plik1 plik2 Sposób 2. $ echo ls ls $ echo $(ls) plik1 plik2
Bash - wprowadzenie 21/39 Skrypty powłoki Rysunek : Sposoby uruchamiania poleceń
Bash - wprowadzenie 22/39 Skrypty powłoki Skrypty powinny mieć uprawnienia do wykonywania: $ chmod +x nazwa_skryptu $./nazwa_skryptu W pierwszej linii umieszcza się: #!/bin/bash Znak # oznacza początek komentarza.
Bash - wprowadzenie 23/39 Skrypty powłoki Prosty skrypt: #!/bin/bash echo "Hello world" i rezultat jego uruchomienia: Hello world
Bash - wprowadzenie 24/39 Argumenty skryptów znak opis $# zwraca liczbę argumentów $0 zwraca nazwę bieżącego programu $1, $2 kolejne argumenty skryptu $@ rozwija się do listy wszystkich argumentów
Bash - wprowadzenie 25/39 Przykład: Zawartość skryptu #!/bin/bash # Testowanie argumentów echo "Uruchomiłeś program $(basename $0)" echo "Znajdujący się " $0 echo Wszystkie: $@ echo "Pierwsze trzy: $1, $2, $3 " shift 2 echo "shift 2" echo "Wszystkie: $@" echo "Pierwsze trzy: $1, $2, $3 "
Bash - wprowadzenie 26/39 Przykład: Efekty uruchomienia $./test1.sh arg_1 arg_2 "arg 3" i Uruchomiłeś program test1.sh Znajdujący się./test1.sh Wszystkie: arg_1 arg_2 arg 3 i Pierwsze trzy: arg_1, arg_2, arg 3 shift 2 Wszystkie: arg 3 i Pierwsze trzy: arg 3, i,
Bash - wprowadzenie 27/39 Obliczanie wartości wyrażeń Sposób 1. Polecenie expr dla operatorów arytmetycznych +,-,*,/,% oraz logicznych <, <=, ==,!=, >=, > Przykład: $expr 2\*3 2*3 $expr 2 \* 3 6 $expr 2 * 3 2 * 3 $ expr 2 \* \( 7-1 \) 12 $ a=5; a=$(expr $a + 1); echo $a 6 $ expr 3 \<= 4 1
Bash - wprowadzenie 28/39 Obliczanie wartości wyrażeń Sposób 2. Za pomocą składni (( wyrażenie )) dla wszystkich operatorów znanych z języka C Przykład: $ a=0; a=$((a + 1)); ((a=a+1)); ((a++)); ((a += 1)) $ echo $a 4 $ x=5; echo "1 +... + $x = $((x * (x + 1) >> 1))" 1 +... + 5 = 15
Bash - wprowadzenie 29/39 Polecenie let let wyrazenie1 wyrazenie2... jest równoważne ((wyrazenie1)) ((wyrazenie2))... Przykład: $ x=0; let x+=2 x+=3; echo $x 5 $ x=0; let "x += 2" "x += 3"; echo $x 5
Bash - wprowadzenie 30/39 Wczytywanie wejścia wczytywanie wejścia komenda read Przykład skryptu: #!/bin/bash read echo $REPLY read a echo $a read a b c echo "a= $a, b= $b, c= $c " read x echo " $x "
Bash - wprowadzenie 31/39 Wczytywanie wejścia Wejście dla poprzedniego skryptu: Pierwsza linia Druga linia Raz Dwa Trzy Cztery Daje w rezultacie: Pierwsza linia Druga linia a= Raz, b= Dwa, c= Trzy Cztery
Bash - wprowadzenie 32/39 Status wyjścia Kod wyjścia każdego programu można sprawdzić wyrażeniem $? $ ls *.txt test.txt $ echo $? 0 $ ls *.nieznane ls: *.nieznane: Nie ma takiego pliku ani katalogu $ echo $? 2
Bash - wprowadzenie 33/39 Instrukcje warunkowe Instrukcja if if polecenie_warunek; then instrukcje fi Instrukcja if z else if polecenie_warunek; then instrukcje else instrukcje_inne fi
Bash - wprowadzenie 34/39 Instrukcje warunkowe Przykład: if cd $katalog; then echo "Jesteśmy w katalogu $katalog" else echo "Nie udało się wejść do katalogu $katalog" fi
Bash - wprowadzenie 35/39 Instrukcje warunkowe Pełna składnia if if warunek1; then instrukcje1 elif warunek2; then instrukcje2;... else instrukcje_else; fi
Bash - wprowadzenie 36/39 Wyrażenia logiczne Polecenie test test -z "" test abc \< def test 3 \> 17 test 3 -lt 17 Porównanie łańcuchów znaków Dostępne możliwości: -z, -n, ==,!=, <, > Porównanie liczb znaków Dostępne możliwości: -eq, -ne, -lt, -le, -gt, -ge, odpowiadające =, <>, <, <=, >, >=
Bash - wprowadzenie 37/39 Wyrażenia logiczne Inne możliwości wykorzystania polecenia test if test -a $plik; then echo "$plik istnieje" if test -f $plik; then echo "$plik jest zwykłym plikiem" elif test -d $plik; then echo "$plik jest katalogiem" fi fi Forma skrócona Polecenie test warunek można zapisać jako [ warunek ]
Bash - wprowadzenie 38/39 Wyrażenia logiczne Można również wykorzystać instrukcję arytmetyczną $ if (( 0 )); then echo prawda; else echo fałsz; fi fałsz $ if (( 1 )); then echo prawda; else echo fałsz; fi prawda $ if (( 3 < 4 )); then echo prawda; else echo fałsz; fi prawda $ if (( 0 < -1 )); then echo prawda; else echo fałsz; fi fałsz $ if (( 3 * 6-2 * 9 )); then echo prawda; else echo fałsz fałsz $ if (( 1/0 )); then echo prawda; else echo fałsz; fi bash: ((: 1/0 : division by 0 (error token is " ") fałsz
Bash - wprowadzenie 39/39 W wykładzie wykorzystano materiały Środowisko programisty, http://mediawiki.ilab.pl/index.php/%c5%9arodowisko programisty C. Newham, B. Rosenblatt, bash. Wprowadzenie, Helion, 2006