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

Podobne dokumenty