'
Jerzy
Sobczyk
$
'
Jerzy
Sobczyk
$
Filtry
stdin
stdout
filter
1
0
Grupowy opis plików
2 stderr
• * dowolny ciąg znaków
• ? dowolny znak
stdin
stdout
• [...] dowolny znak z klasy
stdin
stdout
stdin
stdout
stdin
stdout
filter
filter
filter
•
0
1
0
1
0
1
[a-z] dowolny znak pomiędzy a i z
1
0
2 stderr
2 stderr
2 stderr
• [!...] dowolny znak spoza klasy
2 stderr
ps -ef | grep jurek | wc -l
1
3
&
19
padziernika
1998
roku
SHELL
ASU
%
&
19
padziernika
1998
roku
SHELL
ASU
%
'
Jerzy
Sobczyk
$
'
Jerzy
Sobczyk
$
Kierowanie wejścia/wyjścia
Zmienne
• > – skierowanie wyjścia
PATH – ścieżka poszukiwań komend
• 2> – skierowanie błędów
HOME – katalog użytkownika
• < – kirowanie wejścia
MAIL – skrzynka pocztowa użytkownika
• >> – skierowanie wyjścia (dopisywanie) SHELL – nazwa powłoki
•
PS1 – znak zachęty
| – skierowanie wyjścia jednego programu na wejście drugiego
• 2>&1 – skierowanie błędów na standardowe wyjście PS2 – znak zachęty (używany przy kontynuowaniu komendy) 2
4
&
19
padziernika
1998
roku
SHELL
ASU
%
&
19
padziernika
1998
roku
SHELL
ASU
%
'
Jerzy
Sobczyk
$
'
Jerzy
Sobczyk
$
Argumenty
• $0 – nazwa komendy
Znaki specjalne
• $1 – pierwszy argument
• $i – i-ty argument
• $* – wszystkie argumenty z wyjątkiem $0 jako jeden łańcuch Znaki specjalne: ; & ( ) | ^ < > nowa linia odstęp tabulator znaków
•
•
\c – znak c
$@ – wszystkie argumenty z wyjątkiem $0 jako osobne łańcuchy
• ’string’ – chroni wszystkie znaki specjalne znaków
•
• "string" – chroni wszystkie znaki specjalne z wyjątkiem $
$# – liczba argumentów
•
•
$? – status wyjścia ostatniej komendy
‘command‘ – podstawienie rezultatu komendy
• $$ – PID aktualnegj powłoki
• $! – PID ostatniej komendy wykonywanej w tle 5
7
&
19
padziernika
1998
roku
SHELL
ASU
%
&
19
padziernika
1998
roku
SHELL
ASU
%
'
Jerzy
Sobczyk
$
'
Jerzy
Sobczyk
$
Komendy wewnętrzne
Podstawienia
• break – wyjście z pętli
• ${name} – wartość parametru
• continue – skok na początek pętli
• ${name:-word} – jeśli parametr nie jest zdefiniowany podstaw
• cd – zmiana katalogu
słowo
•
• echo – wyświetlenie tekstu
${name:=word} – jeśli parametr nie jest zdefiniowany zdefiniuj go
•
• export – udostępnienie zmiennych innym programom ${name:?word} – jeśli parametr nie jest zdefiniowany wypisz słowo i zakończ działanie
• read – wczytanie jednej linii z wejścia
• ${name:+word} – jeśli parametr jest zdefiniowany podstaw słowo
• test – sprawdzenie warunku
• unset – skasowanie definicji zmiennej 6
8
&
19
padziernika
1998
roku
SHELL
ASU
%
&
19
padziernika
1998
roku
SHELL
ASU
%
'
Jerzy
Sobczyk
$
'
Jerzy
Sobczyk
$
Sterowanie
•
Porównania
for zmienna [ in słowo ... ] do lista done
– powtórzenie listy komend dla wszystkich wymienionych wartości zmiennej
-z łańcuch – Prawda jeśli długość łańcucha jest równa zero
• case słowo in [ wzorzec [ | wzorzec ] ... ) lista
-n łańcuch – Prawda jeśli długość łańcucha jest większa niż zero
;; ] ... esac
s1 = s2 – Prawda jeśli łańcuchy są identyczne
– wykonanie listy komend jeśli słowo pasuje do wzorca
•
s1 != s2 – Prawda jeśli łańcuchy nie są identyczne if wyrażenie then lista [ elif lista then lista ] ... [ else lista ] fi
n1 -eq n2 – Prawda jeśli liczby są równe
– wykonanie listy komend zależnie od wartości wyrażenia n1 -ne n2 – Prawda jeśli liczby są różne
• while wyrażenie do lista done – powtarzanie listy komend dopuki n1 -lt n2 – Prawda jeśli n1 jest mniejsze niż n2
wyrażenie jest prawdą
n1 -le n2 – Prawda jeśli n1 jest mniejsze lub równe n2
• (lista) – wykonanie listy komend w osobnej powłoce n1 -gt n2 – Prawda jeśli n1 jest większe niż n2
• { lista;} – wykonanie listy komend w tej samej powloce n1 -ge n2 – Prawda jeśli n1 jest większe lub równe n2
• nazwa(){ lista;} – zdefiniowanie procedury
• #komentarz – komentarz
9
11
&
19
padziernika
1998
roku
SHELL
ASU
%
&
19
padziernika
1998
roku
SHELL
ASU
%
'
Jerzy
Sobczyk
$
'
Jerzy
Sobczyk
$
# Czekanie na odpowiedz t lub n
getyn()
{
Sprawdzenie plików
while echo "\n$* (t/n)? \c">&2
do read yn rest
case $yn in
-r plik – Prawda jeśli plik istnieje i można go odczytać
-w plik – Prawda jeśli plik istnieje i można go zapisać
[tT]) return 0 ;;
-x plik – Prawda jeśli plik istnieje i można go wykonać
[nN]) return 1 ;;
-f plik – Prawda jeśli plik istnieje i jest zwykłym plikiem
*) echo "Odpowiedz t lub n" >&2 ;;
-d plik – Prawda jeśli plik istnieje i jest katalogiem esac
-h plik – Prawda jeśli plik istnieje i jest linkiem symbolicznym done
-s plik – Prawda jeśli plik istnieje i ma rozmiar większy niż zero
}
getyn "Czy chcesz zachować plik"
if [ $? -eq 0 ]; then
....
10
12
&
19
padziernika
1998
roku
SHELL
ASU
%
&
19
padziernika
1998
roku
SHELL
ASU
%