Powłoka bash
Transkrypt
Powłoka bash
Powłoka bash Kurs systemu Unix 1 Skrypty powłoki • Skrypt powłoki to plik tekstowy, rozpoczynajacy ˛ si˛e sekwencja: ˛ #!/usr/local/bin/bash # taki sobie skrypt lub podobna.˛ • 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 jakaś ˛ osob˛e, musi ona mieć do tego prawo. Kurs systemu Unix 2 Dygresja (1) • Tego, gdzie znajduje si˛e dane polecenie możemy si˛e dowiedzieć za pomoca˛ polecenia which, piszac ˛ 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 katalog domowy użytkownika $PATH lista (:) kartotek do przeszukiwania $USER identyfikator użytkownika $TERM typ terminala (vt100) $PS1 znak zach˛ety pierwszego poziomu $PS2 znak zach˛ety drugiego poziomu $SECONDS liczba sekund działania powłoki $HISTFILE nazwa pliku z historia˛ $RANDOM 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 ciagu ˛ znaków ? — pasuje do dowolnego znaku [abc] — pasuje do dowolnego znaku z listy [1-6] — pasuje do dowolnego znaku pomi˛edzy • 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 pomoca˛ polecenia alias można tworzyć skróty cz˛esto uzywanych poleceń: alias alias alias alias alias alias alias bye=’logout’ cp=’/bin/cp -i’ deltree=’/bin/rm -r’ dir=’ls -l’ hi=’history | tail’ ki=’kill -9’ lg=’logout’ • alias bez argumentu wypisze zdefiniowane skróty. • unalias <nazwa-skrótu> usuwa skrót Kurs systemu Unix 8 Wi˛ecej o zmiennych • Polecenie export tworzy zmienna˛ dost˛epna˛ 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) • Uruchamiajac ˛ skrypt tworzymy zawsze powłok˛e potomna.˛ Kurs systemu Unix 10 Cytowanie • Apostrof (’) — cytowanie bez żadnych podstawień • Cudzysłów — Podstawiane zmienne, wyniki komend, ale nie znaki specjalne (*,?) • Jeżeli cudzysłowy sa˛ zagnieżdżone, tylko zewn˛etrzne maja˛ znaczenie • Za pomoca˛ \ 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 Wartosc zm to Ala wenus:prych:~> echo ’Wartosc Wartosc zm to $zm wenus:prych:~> echo "Cena to Cena to wenus:prych:~> echo "Cena to Cena to $5 Kurs systemu Unix zm to $zm" zm to $zm’ $5" \$5" 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˛etla for • Pozwala powtarzac pewne czynosci dla kolejnych wyrazow z listy: • Składnia: for zm in lista do <polecenia> done • Przykład for plik in *.txt do cp $plik $plik.bak done Kurs systemu Unix 14 Polecenie test • test wyrażenie ≡ [ wyrazenie ] • Używane z poleceniami sterujacymi ˛ powłoki: if [ "$1" == "hej" ] then echo Pierwszy parametr to \"hej\" fi • Pomini˛ecie "" prowadzi do katastrofy, gdy $1 nieokreślone. • Uwaga na spacje po ’[’ i przed ’]’! Kurs systemu Unix 15 Operatory całkowitoliczbowe polecenia test i1 i1 i1 i1 i1 i1 -eq -ge -gt -lt -le -ne Kurs systemu Unix i2 i2 i2 i2 i2 i2 e1 = e2 e1 ≥ e2 e1 > e2 e1 < e2 e1 ≤ e2 e1 6= e2 16 Operatory tekstowe polecenia test t1 t1 t1 -n -z = t2 != t2 t1 t1 Kurs systemu Unix rowność tekstów (można też ==) rożność tekstów prawdziwy, gdy t1 jest zdefiniowany (niepusty) prawdziwy, gdy tekst jest niepusty prawdziwy, gdy tekst jest pusty 17 Operatory plikowe polecenia test -d -f -r -w -s -x plik plik plik plik plik plik Kurs systemu Unix prawdziwy, gdy plik jest kartoteka˛ prawdziwy, gdy plik istnieje i jest regularny prawdziwy, gdy plik może być czytany prawdziwy, gdy do pliku można pisać prawdziwy, gdy plik ma dlugosc dodatnia˛ prawdziwy, gdy plik jest wykonywalny 18 Operatory logiczne polecenia test ! w w1 -a w2 w1 -o w2 Kurs systemu Unix wyrazenie w jest fałszywe oba wyrażenia sa prawdziwe przynajmniej jedno jest prawdziwe 19 P˛etla while • Znaczenie jak z innych jezyków programowania. • Składnia: while wyrazenie do <polecenia> done • Przykład 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