Powłoka bash Kurs systemu Unix 1
Skrypty powłoki Skrypt powłoki to plik tekstowy, rozpoczynający się sekwencją: #!/usr/local/bin/bash # taki sobie skrypt lub podobną. Polecenie: sekwencja napisów, odzielonych białymi znakami. Pierwszy napis (nr 0) to nazwa polecenia lub skryptu powłoki Pozostałe parametry przekazywane jako argumenty do polecenia. Aby skrypt mógł być wykonany przez jakąś osobę, musi ona mieć do tego prawo. Kurs systemu Unix 2
Dygresja (1) Tego, gdzie znajduje się dane polecenie możemy się dowiedzieć za pomocą polecenia which, pisząc na przykład: which bash Kurs systemu Unix 3
Zmienne i podstawienie Przypisywanie wartości imie=ala (bez spacji, dlaczego?) Obliczanie wartości arytmetycznych echo $[1+1] (polecenie echo wypisuje argument na standardowym wyjściu) Odczytywanie wartości echo $imie echo $nowa_zmienna echo katalog= ls przypisuje zmiennej katalog wynik działania polecenia ls Inna składnia: katalog=$(ls) Kurs systemu Unix 4
Zmienne powłoki $HOME $PATH $USER $TERM $PS1 $PS2 $SECONDS $HISTFILE $RANDOM katalog domowy użytkownika lista (:) kartotek do przeszukiwania identyfikator użytkownika typ terminala (vt100) znak zachęty pierwszego poziomu znak zachęty drugiego poziomu liczba sekund działania powłoki nazwa pliku z historią liczba pseudolosowa z zakresu 0-32K (zawsze inna) Kurs systemu Unix 5
Parametry pozycyjne Gdy wywoływany jest skrypt, powłoka tworzy zmienne dla wartości parametrów. $0 nazwa polecenia $1, $2,... $9, ${10}, ${11},... parametry shift $n = $(n+1) $# liczba argumentów $* cała lista argumentów Kurs systemu Unix 6
Rozwijanie nazw plików Znaki specjalne: * pasuje do dowolnego ciągu znaków? pasuje do dowolnego znaku [abc] pasuje do dowolnego znaku z listy [1-6] pasuje do dowolnego znaku pomiędzy Przykładowo: lpr chap[1-4].? Rozwijanie wykonuje powłoka, jak chcemy przekazać do skryptu parametr *, to musimy napisać * albo "*". Kurs systemu Unix 7
Polecenie alias Za pomocą polecenia alias można tworzyć skróty często uzywanych poleceń: alias bye= logout alias cp= /bin/cp -i alias deltree= /bin/rm -r alias dir= ls -l alias hi= history tail alias ki= kill -9 alias lg= logout alias bez argumentu wypisze zdefiniowane skróty. unalias <nazwa-skrótu> usuwa skrót Kurs systemu Unix 8
Więcej o zmiennych Polecenie export tworzy zmienną dostępną dla powłok potomnych. Przykład: export imie=pawel Polecenie env wypisuje wszystkie zmienne eksportowane. Polecenie set wypisuje wszystkie zmienne Po wykonaniu sekwencji: zm1=1; export zm2=2 env grep "zm1"; env grep "zm2" wypisze zm1=1 set grep "zm1"; set grep "zm2" wypisze zm1=1, zm2=2. Kurs systemu Unix 9
Dygresja (2) Uruchamiając skrypt tworzymy zawsze powłokę potomną. Kurs systemu Unix 10
Cytowanie Apostrof ( ) cytowanie bez żadnych podstawień Cudzysłów Podstawiane zmienne, wyniki komend, ale nie znaki specjalne (*,?) Jeżeli cudzysłowy są zagnieżdżone, tylko zewnętrzne mają znaczenie Za pomocą \ można ukryć dowolny symbol, na przykład sprawić, by spacja nie była separatorem. Kurs systemu Unix 11
Przyklady wenus:prych:~> zm=ala wenus:prych:~> echo "Wartosc zm to $zm" Wartosc zm to Ala wenus:prych:~> echo Wartosc zm to $zm Wartosc zm to $zm wenus:prych:~> echo "Cena to $5" Cena to wenus:prych:~> echo "Cena to \$5" Cena to $5 Kurs systemu Unix 12
Mechanizm here-documents Przekazywanie programom wielolinijkowych tekstow cat <<!END! Ten tekst (w skrypcie powloki) zostanie wyswietlony w dwoch linijkach!end! Umożliwia sterowanie interakcyjnymi programami ze skryptów powłoki. Kurs systemu Unix 13
Pętla for Pozwala powtarzac pewne czynosci dla kolejnych wyrazow z listy: Składnia: Przykład for zm in lista do <polecenia> done for plik in *.txt do cp $plik $plik.bak done Kurs systemu Unix 14
Polecenie test test wyrażenie [ wyrazenie ] Używane z poleceniami sterującymi powłoki: if [ "$1" == "hej" ] then echo Pierwszy parametr to \"hej\" fi Pominięcie "" prowadzi do katastrofy, gdy $1 nieokreślone. Uwaga na spacje po [ i przed ]! Kurs systemu Unix 15
Operatory całkowitoliczbowe polecenia test i1 -eq i2 i1 -ge i2 i1 -gt i2 i1 -lt i2 i1 -le i2 i1 -ne i2 e1 = e2 e1 e2 e1 > e2 e1 < e2 e1 e2 e1 e2 Kurs systemu Unix 16
Operatory tekstowe polecenia test t1 = t2 rowność tekstów (można też ==) t1!= t2 rożność tekstów t1 prawdziwy, gdy t1 jest zdefiniowany (niepusty) -n t1 prawdziwy, gdy tekst jest niepusty -z t1 prawdziwy, gdy tekst jest pusty Kurs systemu Unix 17
Operatory plikowe polecenia test -d plik prawdziwy, gdy plik jest kartoteką -f plik prawdziwy, gdy plik istnieje i jest regularny -r plik prawdziwy, gdy plik może być czytany -w plik prawdziwy, gdy do pliku można pisać -s plik prawdziwy, gdy plik ma dlugosc dodatnią -x plik prawdziwy, gdy plik jest wykonywalny Kurs systemu Unix 18
Operatory logiczne polecenia test! w wyrazenie w jest fałszywe w1 -a w2 oba wyrażenia sa prawdziwe w1 -o w2 przynajmniej jedno jest prawdziwe Kurs systemu Unix 19
Pętla while Znaczenie jak z innych jezyków programowania. Składnia: Przykład while wyrazenie do <polecenia> done n=1 while [ $1 ] do echo $n $ -- $1 n= $[ n + 1 ]; shift done Kurs systemu Unix 20
Polecenie if Zwykla instrukcja warunkowa: if wyrazenie then <polecenia> else <polecenia> fi Przyklad: if [ -f.profile ]; then echo "Jest!"; fi Kurs systemu Unix 21