1. Ustalenie rodzaju interpretera w pierwszej linii skryptu
#!scieżka_do_shella np. #!/bin/bash
2. Wykonywanie skryptu
Plikowi skryptu nadaje się atrybut wykonywalności:
chmod u+x nazwa_skryptu
i uruchamia się go w bieżącym katalogu poprzez wywołanie
./nazwa_skryptu
3. Linia komentarza -poprzedzona znakiem #
# treść komentarza
Cytowanie przy użyciu znaku maskujacego „\ ” zapobiega interpretacji następnego znaku jako znaku specjalnego (sterującego)
4. Wyświetlanie napisów poprzez cudzysłowy(” ”) lub apostrofy (‘ ‘):
echo ”treść napisu” lub echo ‘treść napisu’
np. echo ”mój komentarz” lub echo ‘mój komentarz’
Opcja (-n) komendy „echo”
echo –n ” napis”
oznacza brak przejścia do nowej linii po wykonaniu napisu.
5. Wybrane znaki specjalne powłoki:
* – dowolny łańcuch
? – dowolny znak
`polecenie` – zacytowanie polecenia (para apostrofów wstecznych) w celu przejęcia jego wyjscia np. rm –f `spis_plikow_do_usuniecia`
[abc] – dowolny znak ze zbioru abc np. cat [abc]*
; – separator w grupie poleceń
[a-z] – dowolny znak ze zbioru od a do z
‘tekst’ – para apostrofów otacza daną łańcuchową (likwiduje działanie znaków specjalnych np. $ umieszczonych w środku !!!!)
”tekst” – para cudzysłowów otacza łańcuch
6. Parametry skryptu:
$1, $2, …$9 – kolejne parametry uruchomionego skryptu
$0 – nazwa samego skryptu
$* – napis zawierający ciąg wszystkich parametrów
$@ – ciąg napisów o wartościach parametrów
$# – liczba parametrów skryptu
$? – kod (status) po wykonaniu ostatniego polecenia
7. Zmienne powłoki – są deklarowane w momencie przypisania
Przypisanie:
nazwa_zmiennej=wartość (nie wolno zostawiać spacji wokół =)
tablica[indeks]=wartość
tablica=(wartość_1 wartość_2 … wartość_n)
echo @zmienna
zmienna2=@zmienna1
echo ${tablica[indeks]}
zmienna=${tablica[indeks]}
echo ${tablica[*]} – wyświetlenie całej tablicy (* lub @))
echo ${#tablica[*]} – ilość (#) elementów całej tablicy (* lub @))
Indeksy tablic są liczone od zera i nie muszą być kolejne.
Wybrane zmienne predefiniowane:
HOME – ścieżka dostępu do katalogu domowego,
USER – login użytkownika,
PATH – zbiór ścieżek przeszukiwania
OSTYPE – łańcuch opisu systemu operacyjnego
UID – identyfikator użytkownika
RANDOM – generator kolejnej liczby losowej
Zmienne predefiniowane są globalne; zmienne lokalne można eksportować do procesów potomnych poprzez:
export nazwa_zmiennej
8. Wyrażanie warunków
Odbywa się poprzez polecenia:
test wyrażenie-testowe
lub
[<spacja>wyrażenie-testowe<spacja>]
Wyrażenia testowe dla liczb całkowitych a i b
a –eq b a=b
a –ne b a≠b
a –le b a≤b
a –lt b a<b
a –ge b a≥b
a –gt b a>b
Wyrażenia testowe dla łańcuchów
-z łańcuch łańcuch zerowy (pusty)
-n łańcuch łańcuch niezerowy
łańcuch1 == łańcuch2 łańcuchy identyczne
łańcuch1 != łańcuch2 łańcuchy różne
Wyrażenia testowe dla plików
-e plik plik istnieje
-d katalog katalog istnieje
-r plik plik istnieje do odczytu
-w plik plik istnieje do zapisu
-x plik plik istnieje do wykonania
plik1 –nt plik2 plik1 jest nowszy niż plik12
plik1 –ot plik2 plik1 jest starszy niż plik12
Wyrażenia testowe logiczne
( wyr ) wyrażenie prawdziwe
! wyr wyrażenie fałszywe
wyr1 –a wyr2 koniunkcja
wyr1 –o wyr2 alternatywa
W wyrażeniu testowym znaki operatorów muszą być odseparowane spacjami.
9. Wczytywanie danych od użytkownika:
read zmienna1 zmienna2 …
Przykład:
echo ”Podaj imie i nazwisko:”
read IMIE NAZWISKO
echo ”Imię: $IMIE”
echo ”Nazwisko: $NAZWISKO”
10. Łączenie poleceń
koniunkcja: polecenie1 && polecenie2
alternatywa: polecenie1 || polecenie2
{ polecenie1; polecenie2; } - grupa poleceń wykonywanych przez powłokę
( polecenie1; polecenie2; ) - grupa poleceń wykonywanych przez podpowłokę
11. Wyrażenia arytmetyczne
zmienna=$((wyrażenie))
expr wyrażenie
!!!! W wyrażeniu po expr argumenty i operatory muszą być oddzielane spacjami !!!!
Operatory w wyrażeniach:
+, -, *, =(logiczne porównanie), !=, >, <, >=, <=, &(iloczyn logiczny), | (suma logiczna), length(długość_łańcucha), : (porównanie)
Instrukcja echo $? zwraca kod wyjścia z wyrażenia (0 jeśli OK.)
Przykład:
expr 5 = 4 - zwraca 0
expr length „programowanie skryptow”
expr 1 + 2 \* 4 - zwraca wartość 9
expr $z + 3 \< 2
Nawiasy (, ) oraz operatory, które potencjalnie mogą być znakami specjalnymi powłoki należy cytować np. \*, \&, \) , \<, \> itp.
12. Instrukcja “if” występuje jako:
if [ wyrażenie(warunek) ]
then
polecenia
fi
lub w postaci
if [ wyrażenie(warunek) ]
then
polecenia
else
inne polecenia
fi
Przykład:
if [ $# -eq 2 ]
then
echo ”Skrypt ma 2 parametry”
else
echo ”Skrypt nie ma 2 parametrów”
fi
13. Pętla “for”
Pierwsza składnia:
for zmienna in lista_możliwości
do
lista_poleceń
done
Przykład – usuwanie podkatalogów „kat1”, „kat2” katalogu bieżącego
for I in ./kat1 ./kat2
do
rm –rf $I/*
done
Druga składnia (dla parametrów pozycyjnych):
for zmienna
do
lista_poleceń
done
Przykład – odczytanie parametrów skryptu (pozycyjnych)
for I
do
echo $I
done
Trzecia składnia (praktycznie tak jak w języku C):
for ((warunek_startu; warunek_końca; warunek_przyrostu))
do
lista_poleceń
done
Przykład –wyświetlanie liczb od 1 do 4
for ((I=1; I<=4; I ++))
do
echo $I
done
14. Instrukcja “case” dokonująca wyboru pewnych grup poleceń zależnie od wartości zmiennej testującej
case zmienna_testowa in
wzorzec1 )
grupa_poleceń_1
;;
wzorzec2 )
grupa_poleceń_2
;;
..............................
* )
inne_przypadki ( opcjonalnie)
;;
esac
We wzorcach można wykorzystywać znaki „*”, „?” oraz zbiory znaków np. [0-9], [a-z]. Kilka wzorców dla jednej grupy poleceń oddziela się symbolem „|” oznaczającym operację „lub”.
Przykład:
case $1 in
START | poczatek )
echo “ parametr START”
;; # koniec opcji
STOP )
echo “ parametr STOP”
;; # koniec opcji
esac