Skrypty i instrukcje strukturalne
Materiał do omówienia:
- argumenty skryptów: $1, $2, ..., $0, $@, $#, shift,
- zmienne środowiskowe (przypomnienie i uzupełnienie):
- przypisanie, $zmienna, ${zmienna},
- echo, read,
- if:
- składnia: if ... ; then ... elif ... then ... else ... fi,
- exit-code-y jako wartości logiczne --
;, |, &, &&, ||,
- test ( [ ... ] ), -f plik,
-d katalog, =, !=, -a, -o,
-eq,
- wyrażenia arytmetyczne $(( ... )), $[ ... ]
(od tego momentu nie używać expr-a, jeśli to nie jest konieczne),
- $( ... ) -- strukturalna wersja `...`,
- for:
- składnia (for ... [in ...] ; do ... done),
- pętla po elementach listy, a nie po liczbach,
- przebiega argumenty, gdy brak listy,
- uwaga na ";".
Przykładowe programy:
Ćwiczenia:
- Napisać skrypt, który wypisze sumę trzech pierwszych swoich argumentów.
(Możesz założyć, że te argumenty istnieją i są liczbami całkowitymi.)
- Napisać skrypt, który sprawdza, czy ma jakiś parametr i wypisuje stosowną informację.
- Napisz skrypt, ktory wypisuje swoje argumenty, kazdy w osobnym wierszu.
- Napisac skrypt, ktory dla kazdego argumentu sprawdza, czy
jest on katalogiem i jesli tak, to wypisuje jego zawartosc,
jesli nie, to sprawdza czy jest plikiem i wypisuje jego tresc,
a jezeli nie jest ani plikiem, ani katalogiem, to zglasza blad.
Skrypt uzyty bez argumentow powinien wypisac instrukcje
obslugi.
- Napisać skrypt, który dla każdego pliku w bieżącym katalogu,
jego podkatalogach, itd., wypisze nazwę i rozmiar pliku.
(Wskazówka: for + find + wc.)
- Rozszerz rozwiązanie poprzedniego zadania tak, żeby skrypt
akceptował jeden opcjonalny argument.
Argument ten to nazwa katalogu, od którego należy zacząć
przeszukiwania, zamiast od bieżącego katalogu.
(Należy sprawdzić czy faktycznie jest to katalog.)
Jeżeli nie podano argumentu, to skrypt powinien działać tak
jak w poprzednim zadaniu.
- Napisać skrypt, który wyświetli wszystkie katalogi z:
- danego katalogu, jeżeli nie dostanie argumentów,
- katalogów przekazanych jako argumenty
(powinien sprawdzać, czy są to rzeczywiscie katalogi).
- Napisać skrypt, który wszystkie pliki z sufiksem ~
(np. plik~), skopiuje (jezeli takie są) do katalogu BACKUP
w biezacym katalogu.
Jeżeli katalog BAKUP nie istnieje skrypt powinien go zalozyć.
Jeżeli jest juz plik (lub inny nie-katalog) o nazwie BACKUP,
skrypt powienien zgłosić błąd.
- Napisac skrypt, ktory znajdzie w biezacym katalogu wszystkie
pliki, ktore zawieraja w swojej tresci swoja nazwe.