Bash - wprowadzenie
Transkrypt
Bash - wprowadzenie
Bash - wprowadzenie Bash - wprowadzenie 1/39 Czym jest bash? Rysunek : Zadanie powłoki to ukrycie wywołań systemowych Bash - wprowadzenie 2/39 Czym jest bash? Przykład polecenia: $ sort plik_z_danymi > plik_z_danymi.sorted Czynności powłoki: I podział polecenia na słowa I znaczenie poszczególnych słów I ustawienie odpowiednich strumieni I/O I odnalezienie komendy sort i uruchomienie jej z odpowiednimi argumentami Bash - wprowadzenie 3/39 Do czego się przydaje? I kompilacja, budowanie aplikacji, I przetwarzanie plików (tworzenie, usuwanie, szukanie, itp.), I prosta obróbka (np. tekstowa) plików, I administracja systemem (np. konfiguracja, uruchamianie demonów), I i inne Bash - wprowadzenie 4/39 Do czego się nie przydaje? I zadań trudnych obliczeniowo, wymagających szybkiego działania, I operacji skomplikowanych algorytmicznie lub matematycznie, I operacji niskopoziomowych, jak dostęp do sprzętu. Bash - wprowadzenie 5/39 Przeszukiwanie dokumentacji I man , np. man sh-utils I info I polecenie powłoki help Bash - wprowadzenie 6/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 7/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 Bash - wprowadzenie 8/39 $ echo "Witaj\nswiecie" Witaj\nswiecie $ echo -e "Witaj\nswiecie" Witaj swiecie Bash - wprowadzenie 9/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 10/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 11/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 12/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: I * – dowolny ciąg znaków (być może pusty), I ? – dokładnie jeden dowolny znak, I [set] – dowolny znak ze zbioru, I [!set] – dowolny znak nie występujący w zbiorze. Bash - wprowadzenie 13/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 14/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 15/39 Znaki specjalne, apostrofy, cudzysłowy Cudzysłów (”) Anuluje specjalne znaczenie znaków, z wyjątkiem $ ‘ \ : $ echo "aa*?|<>\\" aa*?|<>\ Bash - wprowadzenie 16/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 17/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 18/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 19/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 20/39 Skrypty powłoki Rysunek : Sposoby uruchamiania poleceń Bash - wprowadzenie 21/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 22/39 Skrypty powłoki Prosty skrypt: #!/bin/bash echo "Hello world" i rezultat jego uruchomienia: Hello world Bash - wprowadzenie 23/39 Argumenty skryptów znak $# $0 $1, $2 $@ opis zwraca liczbę argumentów zwraca nazwę bieżącego programu kolejne argumenty skryptu rozwija się do listy wszystkich argumentów Bash - wprowadzenie 24/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 25/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 26/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 27/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 28/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 29/39 Wczytywanie wejścia wczytywanie wejścia – komenda read Przykład skryptu: #!/bin/bash read echo read echo read echo read echo $REPLY a $a a b c "a=’$a’, b=’$b’, c=’$c’" x "’$x’" Bash - wprowadzenie 30/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 31/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 32/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 33/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 34/39 Instrukcje warunkowe Pełna składnia if if warunek1; then instrukcje1 elif warunek2; then instrukcje2; ... else instrukcje_else; fi Bash - wprowadzenie 35/39 Wyrażenia logiczne Polecenie test test test test test -z "" abc \< def 3 \> 17 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 36/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 37/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 38/39 W wykładzie wykorzystano materiały I Środowisko programisty, http://mediawiki.ilab.pl/index.php/%C5%9Arodowisko programisty I C. Newham, B. Rosenblatt, bash. Wprowadzenie, Helion, 2006 Bash - wprowadzenie 39/39