Tworzenie skryptów w powłoce Bash


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