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