Programowanie w Shellu (index)
Stworzyć plik menu.sh postaci:
#!/bin/bash # # menu.sh # # Zastosowanie polecenia select do tworzenia menu. # Tekst objasnienia PS3="Wybierz opcje: " # Stworzenie menu clear # Naglowek menu z jakas informacja echo echo " MENU PROGRAMU ZABAWA" echo select OPTION in "Jeden" "Dwa" "Trzy" "Break" "Exit" do # Komunikaty kontrolne echo "$0: Zmienna REPLY zawiera ${REPLY}." echo "$0: Zmienna sterujaca OPTION zawiera ${OPTION}." # # Tekst wpisany przez uzytkownika siedzi w zmiennej REPLY # case ${REPLY} in 1) echo "Opcja numer jeden." ;; 2) echo "Opcja numer dwa." ;; 3) echo "Opcja numer trzy." ;; 4) break ;; 5) exit 0 ;; # Dzialanie domyslne *) echo "Nie trafiles w klawisz?" esac # Zatrzymujemy obraz, aby nie zniknal echo "Naciśnij [ Enter ], aby kontynuować..." read clear # Naglowek menu z jakas informacja # (dla drugiego i nastepnych wyswietlen) echo echo " MENU PROGRAMU ZABAWA" echo done # Komunikat kontrolny echo "$0: Wychodzimy z petli select przez break." exit 0
Uruchomić skrypt poleceniem: ./menu.sh
Zbadać możliwości polecenia xargs.
$ ls | xargs -n10 rm -f (wykonać rm -f podając mu po 10 plików [opcja -n10]; można wykorzystać przy poleceniach, które mają określoną maksymalną liczbę argumentów) $ touch p{1,2,3,4,5,6,7,8,9} (tworzenie pustych plików do ćwiczeń) $ ls | xargs -i mv {} {}.txt (zmieni nazwy plików na p?.txt; -i to tryb wstawiania, oznacza -i{}, gdzie {} to miejsce wstawienia argumentu, implikuje -x i -l 1, czyli wezmie po jednej linii wyprodukowej przez ls) $ ls chapter* | xargs -i cp {} old{} (stworzenie duplikatów plików chapter1, ... jako plików oldchapter1, ...)
Zbadać możliwości polecenia find.
$ find kat1 -name plik1 -print (szukaj plik1 w kat1 i głębiej; brak kat1 oznacza katalog bieżący; wypisuje nazwy plików, po jednym w każdej linii; -print jest domyślną akcją [można pominąć tą opcję]) $ find kat1 -name plik\* (trzeba zasłonić znaki wzorca!) $ find kat1 -user user1 (szukaj plików, których właścicielem jest user1) $ find kat1 -type type1 (szukanie plików określonego typu; type1 to jeden ze znaków: b, c, d, p, f, l, s) [root]# find / -user nobody (szukamy plikow demona httpd) [root]# find / -group nobody (szukamy plików demona httpd) [root]# find / -uid 500 (szukamy plików z UID=500) [root]# find / -gid 500 (szukamy plików z GID=500) [root]# find / -perm +7000 -user root (szukamy bitów specjalnych) $ find ${HOME} -name brudy\* -exec rm -f {} \; (skasuje znalezione pliki [-exec to akcja]; trzeba zasłonić znaki specjalne przed shellem; nawiasy {} zostaną zastąpione nazwą znalezionego pliku; na końcu polecenia musi być zasłonięty średnik `\;') $ find ${HOME} -name brudy\* -ok rm -f {} \; (jw, ale pyta o potwierdzenie `y' lub `Y') $ find . -name p\?.txt -exec cp {} {}.old \; (wszystkie pliki o wzorcu p?.txt skopiuje do postaci p?.txt.old)
Za pomocą polecenia select użytkownik może w łatwy sposób tworzyć menu. Polecenie to jak gdyby łączy w sobie polecenia while i case.
Zmienna PS3 przechowuje objaśnienie do menu. Tekst wpisany przez użytkownika wstawiany jest do zmiennej REPLY. Jeżeli użytkownik wciśnie [Enter], to menu się powtórzy bez przetworzenia poleceń. Jeżeli użytkownik wpisze coś złego, to zmienna sterująca (np. OPTION) będzie pusta, a w zmiennej REPLY będzie umieszczony wybór użytkownika.
Polecenie xargs jest wygodne, gdy pracujemy z lista plików z jednego katalogu. Polecenie pobiera na wejściu kolejne wiersze i wykonuje polecenia, dokonując ewentualnych podstawień.
Polecenie find zapewnia możliwość przeglądania całego drzewa katalogów w poszukiwaniu określonych plików lub katalogów i wykonanie określonego polecenia na znalezionych plikach lub katalogach.