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

Podobne dokumenty