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. Można je podejrzeć poleceniem: $ history Wszystkie zdarzenia zostaną ponumerowane, stęp 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 wprowadzonego tekstu zostanie znalezione i wyswietlone. Jeśli jest ich kilka, system powiadamia sygnałem dźwiękowym i daje możliwość pisania kolejnych znaków. Znanymi i już wczesniej podanymi metodami można edytować polecenie. Istnieją różne sposoby odwołania się z listy historii. Przykławo: $!5 Odwołanie nr 5 z listy historii. $!ls Odwołanie pierwszego znalezionego na liście zaczynajacego się ls. $!-2 Odwołanie drugiego od końca listy. Uwaga: są numerowane według kolejności ich wykonywania. Sposoby edycji zdarzeń historii Istnieją dwa sposoby edycji: pierwszy wykorzystuje możliwość edytora wiersza poleceń odwołania sie zdarzenia i edycji za pomocą zestawu poleceń edytora emacs. Zestaw poleceń znajduje się poniżej: [Ctrl+p] przejście poprzedniego listy historii [Ctrl+n] - przejście następnego 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 zostały już podane wczesniej drugi wykorzystuje edycji poleceń edytor (myslnie vi) wskazywany zmienną FCEDIT. W czasie wykonywania można wskazać wykorzystywany edytor, przykławo emacs. $ fc 5 Wywołanie myślnego edytora dla edycji 5ego listy $ fc -e emacs 5 Wywołanie edytora emacs dla edycji 5ego listy Zmienne powłoki Zmienna powłoki jest deniowana wtedy, kiedy po raz pierwszy jest użyta. Może się składać z wolnych 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 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 wyprowadzania danych. Polecenie read służy pobierania danych z klawiatury. Czyta słownie następny wiersz ze standarwego wejścia aż 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.
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. mail grzesiek << koniec_listu koniec_listu Operacje arytmetyczne powłoki: let Polecenie let powłoki służy wykonywania działań arytmetycznych. Składnia let: $ let wartość1 operator wartość2 Przykład $let 2*7 $let "2 * 7" Przypisanie wyniku let zmiennej $let "wynik = 2 * 7" Możliwe jest w poleceniu let używanie wolnych operatorów porównania wykonania porównań między wartościami liczbowymi - używane zarządzania strukturami sterującymi.uwaga: polecenie let automatycznie rozwija zmienne używane w wyrażeniach. (nazwa skryptu znowu) while let "znowu<=5" echo $znowu Witamy ne Wprowadzenie zmiennych skryptu przykład 1 while let "znowu<=$1" echo $znowu Witamy ne wywołanie znowu liczba_powtórzeń przykład 2 while let "znowu<=$1" echo $znowu $2 ne wywołanie znowu liczba_powtórzeń tekst_powitania Polecenie test Wyrażenie porównania jest w powłoce Linuxa testem logicznym. Składnia : test wartość1 -opcja wartość2
Operatory całkowite 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 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 zdeniowana -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 test -d nazwa_pliku true, jeśli nazwa pliku odnosi się 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 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 if if polecenie polecenie1 polecenie2 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 ls --size ls -l echo jak sobie chcesz Struktura elif pozwala na zagłebianie operacji if. (skrót od if) Jeśli pierwszy test if zakończy się błędem, sterowanie jest przekazywane następnej struktury elif i wykonywany jest test związany z nią, działąnie jest powtarzane momentu, kiedy zostanie wuykonany prawdziwy test. Wykonywane są następujące za prawdziwym testem in sterowanie jest przekazywane poza strukturę if (poza słowo ). Sprawdzenie, czy w bieżącuym katalogu znajduje się plik o nazwie.prole if
test -f.prole echo "plik.prole znaleziony w bieżącym katalogu" echo "nie znaleziony plik.prole" Struktura wielokrotnego wyboru case: case napis in wzorzec_1) wzorzec_2) wzorzec_n) 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 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" Pętla for - in składnia for zmienna in lista_wartosci ne forma for - in bez listy wartości składnia: for zmienna ne Pętla jest wykonywana dla każdego wyrazu zawartego w zmiennej zmienna Skrypt pobiera wolną 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 tr a-z A-Z < $plik >$plik.caps ne Skrypt tworzy kopię zapasową plików źródłowych i umieszcza je w katalogu zrodlakop for kopplik in *.c cp $kopplik zrodlakop/$kopplik echo $kopplik ne 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, 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ń. for kopplik cp $kopplik zrodlakop/$kopplik echo "$kopplik" ne