Każdy skrypt powinien rozpoczynać się linią
#!/bin/bash
i posiadać uprawnienia do wykonywania.
Skrypty można wywołać:
$ ./skrypt.sh # skrypt.sh jest w bieżącym katalogu
$ katalog/skrypt.sh # ... w innym katalogu
Informacje o składni można znaleźć w:
Zmiana pierwszej linii na:
#!/bin/bash -x
spowoduje, ze bash wyświetli każde wykonywane polecenie. Przydatne przy szukaniu błędów.
W trakcie tych zajęć należy używać edytora vim.
Zmienne specjalne:
Zmienna | Znaczenie |
---|---|
$* | Wszystkie parametry wywołania |
$@ | Wszystkie parametry wywołania |
$# | Liczba parametrów wywołania |
$1, $2, … | n-ty parametr wywołania |
Uwaga: Działanie $* i $@ różni się w zakresie interpretowania spacji w parametrach.
Przykład użycia parametrów wywołania: arguments1.sh.
Hello world
Napisać skrypt, który wypisze tekst Hello world na stdout
Zamiana plików
Napisać skrypt, który zamieni zawartościami dwa pliki podane jako argumenty. Zadbać aby nazwy plików ze spacjami były poprawnie obsłużone.
Użyteczne programy: mktemp, mv, rm
Podpowiedź: zamiana wartościami dwóch zmiennych w C wymaga pomocniczej zmiennej:
Liczenie słów
Napisać skrypt, który można wywołać z dowolną liczbą parametrów. Skrypt wypisuje liczbę wszystkich słów (nie tylko słów linux), we wszystkich liniach zawierających słowo linux, we wszystkich plikach podanych jako argumenty. (Czyli wypisujemy jedną liczbę jako wyjście).
Programy: grep
, wc
, przypomnienie: grep można wywołać z dowolną liczbą plików jako argumenty. Warto użyć operatora |
Przykład: conditional.sh
Przynależność do grup
Napisać, skrypt, który przyjmuje dwa argumenty: nazwę użytkownika i nazwę grupy. Skrypt sprawdza czy podany użytkownik jest członkiem podanej grupy. W przypadku, gdy jest: wypisuje komunikat z informacją i kończy się ze statusem 0, w p.p. wypisuje informację i kończy się ze statusem 1.
Podpowiedzi: id -n -G, grep -E, wyrażenie regularne z , echo, przekierowanie do /dev/null, exit 0, exit 1
Uwaga: użytkownik karwowskij jest członkiem grupy teachers, ale nie tea. Należy to poprawnie obsłużyć!
Długie pliki
Napisać skrypt, który sprawdza czy plik podany jako argumenty jest długi i jeśli tak jest, wypisuje komunikat “To jest długi plik”. Za długi plik uznawać plik o długości większej niż 200 linii.
Podpowiedzi: wc, test
Gra w zgadywanie liczb
Napisać skrypt, który losuje liczbę i prosi użytkownika, aby ją odgadł wpisując ją z klawiatury. Jeśli użytkownik odgagł liczbę, zakończyć skrypt ze statusem 0, w p.p. 1.
Podpowiedzi: bash definiuje specjalną zmienną $RANDOM, która przy każdym podstawieniu zwraca inną liczę losową. Aby odczytać tekst z klawiatury i zapisać go do zmiennej należy użyć polecenia read powłoki (znaleźć szczegóły użycia w manualu).
Dłuższy plik
Napisać skrypt, który dla dwóch nazw plików podanych jako argumenty wypisze na stdout ten, który ma więcej linii.
Ulepszona zamiana plików
Rozszerzyć skrypt zamieniający zawartości plików o następujące elementy:
Jeśli warunki nie są spełnione wypisać komunikat o błędzie i zakończyć ze statusem 1.
Prosta kopia zapasowa
Napisać skrypt, który przyjmuje dokładnie jeden plik jako argument. Skrypt tworzy w katalogu HOME/backup kopię pliku o takiej samej nazwie. Ponadto w katalogu HOME/backup tworzony jest plik o tej samej nazwie z dodanym rozszerzeniem .description. Plik ten ma zawierać numer i-node oryginalnego pliku.
Jeśli katalog backup nie istnieje, ma zostać utworzony.
stat
, basename
Dziennik (trudne)
Napisać skrypt, który umożliwi następujące operacje:
Każdy wpis w dzienniku składa się z dokładnie jednej linii. Wpisy mają być przechowane w pliku tekstowym w postaci
[data] wpis
Szczegóły implementacji – sposób wywołania skrypty, format daty, itp. należy wybrać samodzielnie (najlepiej tak, aby ułatwić sobie implementację).
Podpowiedzi: grep -E, date