Instrukcja SO – powłoka BASH i skrypty powłoki Istotne jest
Transkrypt
Instrukcja SO – powłoka BASH i skrypty powłoki Istotne jest
Instrukcja SO – powłoka BASH i skrypty powłoki Istotne jest zrozumienie działania narzędzia history powłoki BASH. Każde polecenie wprowadzone i wykonane w powłoce jest nazywane zdarzeniem. Historia jest buforem tekstowym zawierającym wcześniej wprowadzone polecenia. Można je podejrzeć poleceniem: $ history Wszystkie zdarzenia zostaną ponumerowane, dostęp do nich jest możliwy poprzez użycie klawiszy kursor w dół i kursor w górę. Powłoka BASH ma funkcję wyszykiwania i uzupełniania zdarzeń. Należy wprowadzić tę część zdarzenia, którą pamiętamy, wciskamy klawisz Esc, zaraz za nim klawisz Tab, a zdarzenie pasujące do wprowadzonego tekstu zostanie znalezione i wyswietlone. Jeśli jest ich kilka, system powiadamia sygnałem dźwiękowym i daje możliwość dopisania kolejnych znaków. Znanymi i już wczesniej podanymi metodami można edytować polecenie. Istnieją różne sposoby odwołania się do polecenia z listy historii. Przykładowo: $ !5 Odwołanie do polecenia nr 5 z listy historii. $ !ls Odwołanie do pierwszego znalezionego na liście polecenia zaczynajacego się ls. $ !-2 Odwołanie do drugiego od końca listy polecenia. Uwaga: polecenia są numerowane według kolejności ich wykonywania. Sposoby edycji zdarzeń historii Istnieją dwa sposoby edycji: – pierwszy wykorzystuje możliwość edytora wiersza poleceń do odwołania sie do zdarzenia i edycji polecenia za pomocą zestawu poleceń edytora emacs. Zestaw poleceń znajduje się poniżej: [Ctrl+p] – przejście do poprzedniego polecenia listy historii [Ctrl+n] - przejście do następnego polecenia listy historii [Ctrl+<] - przejście na początek listy historii [Ctrl+>] - przejście na początek listy historii /wzorzec – przeszukiwanie listy wstecz ?wzorzec – przeszukiwanie listy wprzód n – powtórzenie przeszukiwania pozostałe polecenia zostały już podane wczesniej – drugi wykorzystuje do edycji poleceń edytor (domyslnie vi) wskazywany zmienną FCEDIT. W czasie wykonywania polecenia można wskazać wykorzystywany edytor, przykładowo emacs. $ fc 5 Wywołanie domyślnego edytora dla edycji 5ego polecenia listy $ fc -e emacs 5 Wywołanie edytora emacs dla edycji 5ego polecenia listy Zmienne powłoki Zmienna powłoki jest definiowana wtedy, kiedy po raz pierwszy jest użyta. Może się składać z dowolnych znaków alfabetu, łącznie z podkreśleniem. Może zawierać cyfry, ale nie jako pierwsze znaki. Nie może zawierać znaków !, &, space. Te znaki są rezerwowane do własnego użytku przez powłokę. Nazwa może być tylko jednym słowem. Wartość jest przypisywana operatorem przypisania =. Wartość zmiennej powłoki może wymagać cytowania. We.wy skryptu Polecenie echo służy do wyprowadzania danych. Polecenie read służy do pobierania danych z klawiatury. Czyta dosłownie następny wiersz ze standardowego wejścia aż do znaku nowego wiersza i przypisuje zmiennej. Przykłąd: echo wprowadz powitanie read powitanie echo "chcesz, zeby cię witac slowem $powitanie Podwójne cudzysłowy proste zapobiegają rozwijaniu wartości zmiennej. Przykład: echo wprowadz wzorzec plikow read wzorzec echo Poszukiwane pliki to: $wzorzec W tym przykładzie zmienna zostanie rozwinięta. Podwójne przekierowanie odwrotne << umieszcza dane w poleceniu. Przykład: mail grzesiek << koniec_listu tekst listu tekst listu tekst listu tekst listu koniec_listu Operacje arytmetyczne powłoki: let Polecenie let powłoki służy do wykonywania działań arytmetycznych. Składnia polecenia let: $ let wartość1 operator wartość2 Przykład $let 2*7 $let "2 * 7" Przypisanie wyniku let do zmiennej $let "wynik = 2 * 7" Możliwe jest w poleceniu let używanie dowolnych operatorów porównania do wykonania porównań między wartościami liczbowymi - używane do zarządzania strukturami sterującymi.Uwaga: polecenie let automatycznie rozwija zmienne używane w wyrażeniach. Przykład: (nazwa skryptu znowu) znowu=1 while let "znowu<=5" do echo $znowu Witamy let "znowu=znowu+1" done Wprowadzenie zmiennych skryptu przykład 1 znowu=1 while let "znowu<=$1" do echo $znowu Witamy let "znowu=znowu+1" done wywołanie znowu liczba_powtórzeń przykład 2 znowu=1 while let "znowu<=$1" do echo $znowu $2 let "znowu=znowu+1" done wywołanie znowu liczba_powtórzeń tekst_powitania Polecenie test Wyrażenie porównania jest w powłoce Linuxa testem logicznym. Składnia polecenia: test wartość1 -opcja wartość2 Operatory całkowite polecenia test int1 -eq int2 true, jeśli są równe int1 -qe int2 true, jeśli int1 większy lub równy int2 int1 -qt int2 true, jeśli int1 większe od int2 int1 -le int2 true, jeśli int1 mniejszy lub równy int2 int1 -lt int2 true, jeśli int1 mniejszy int2 int1 -ne int2 true, jeśli int1 nie równy int2 Operatory tekstowe polecenia test tekst1 = tekst2 true, jeśli tekst1 jest identyczny z tekst2 tekst1 != tekst2 true, jeśli tekst1 nie jest identyczny z tekst2 tekst true, jeśli wartość zmiennej tekst jest zdefiniowana -n tekst true, jeśli tekst ma długość większą od zera -z tekst true, jeśli tekst ma długość równą zero Operatory plikowe polecenia test -d nazwa_pliku true, jeśli nazwa pliku odnosi się do katalogu -f nazwa_pliku true, jeśli nazwa pliku jest zwykłym plikiem -r nazwa_pliku true, jeśli plik nazwa pliku może być czytany przez proces -s nazwa_pliku true, jeśli plik nazwa pliku ma długość większą od zero -w nazwa_pliku true, jeśli plik nazwa pliku może być zapisywany przez proces -x nazwa_pliku true, jeśli plik nazwa pliku jest wykonywalny operatory logiczne polecenia test !wyrażenie true, jeśli wyrażenie nie jest prawdziwe wyr1 -a wyr2 true, jeśli oba wyrażenia są prawdziwe wyr1 -o wyr2 true, jeśli któreś z wyrażeń jest prawdziwe Wyrażenie warunkowe if Składnia polecenia if if polecenie then polecenie1 else polecenie2 fi przykład echo wprowadz s w celu wyprowadzenia rozmiarow plikow echo w przeciwnym wypadku wyprowadzone beda wszystkie informacje o plikach echo -n "prosze o wprowadzenie opcji" read wybor if test $wybor = s then ls --size else ls -l fi echo jak sobie chcesz Struktura elif pozwala na zagłebianie operacji if. (skrót od else if) Jeśli pierwszy test if zakończy się błędem, sterowanie jest przekazywane do następnej struktury elif i wykonywany jest test związany z nią, działąnie jest powtarzane do momentu, kiedy zostanie wuykonany prawdziwy test. Wykonywane sąpolecenia następujące za prawdziwym testem in sterowanie jest przekazywane poza strukturę if (poza słowo fi). Przykład: Sprawdzenie, czy w bieżącuym katalogu znajduje się plik o nazwie .profile if test -f .profile then echo "plik .profile znaleziony w bieżącym katalogu" else echo "nie znaleziony plik .profile" fi Struktura wielokrotnego wyboru case: case napis in wzorzec_1) polecenia ;; wzorzec_2) polecenia ;; wzorzec_n) polecenia ;; *) polecenia ;; esac Przykłady: przykład 1 echo listowanie rozmiarów wpisz s echo listowanie wszystkich informacji wpisz l echo listowanie plików wpisz c echo -n "wprowadz opcje:" read wybor case $wybor in s) ls --size ;; l) ls -l ;; c) ls *.c ;; *) echo bledna opcja esac Przykład 2 Skrypt sprawdza, czy pierwszym argumentem przekazanym w wierszu poleceń jest -i lub -e. W pierwszym przypadku zlicza ilość wierszy pliku o nazwie podanej jako drugi parametr, zaczynających się na literę i. Jeśli pierwszym argumentem jest -e, program zlicza wiersze pliku podanego jako drugi argument, które zaczynają się na literę e. W innym przypadku wyświetlany jest komunikat o blędzie. case $1 in -i) licz=`grep ^i $2 | wc -l` echo "ilość wierszy zaczynających się na i w pliku $2 wynosi $licz" ;; -e) licz=`grep ^e $2 | wc -l` echo "ilość wierszy zaczynających się na e w pliku $2 wynosi $licz" ;; *) echo "nie rozpoznana opcja" ;; esac Pętla for - in składnia for zmienna in lista_wartosci do polecenia done forma polecenia for - in bez listy wartości składnia: for zmienna do polecenia done Pętla jest wykonywana dla każdego wyrazu zawartego w zmiennej zmienna Przykład: Skrypt pobiera dowolną liczbę parametrów - nazw plików tekstowych, zamienia małe litery na wielkie, wynik zapisuje w pliku o nazwie oryginału, ale z rozszerzeniem caps for plik do tr a-z A-Z < $plik >$plik.caps done Przykład: Skrypt tworzy kopię zapasową plików źródłowych i umieszcza je w katalogu zrodlakop for kopplik in *.c do cp $kopplik zrodlakop/$kopplik echo $kopplik done Inna wersja skryptu Struktura for bez określonej listy wartości bierze jako listę wartości argumenty wiersza poleceń. Argumenty podane w wierszu poleceń w czasie wywoływania skryptu stają się listą wartości, do których odwołuje się for. Kolejność od pierwszego podanego argumentu. Struktura for bez zadanej listy jest równoważna liście $@. $@ jest specjalną zmienną argumentową, której wartością jest lista argumentów wiersza poleceń. Przykład: for kopplik do cp $kopplik zrodlakop/$kopplik echo "$kopplik" done