Tablice, procesy, sygnały i nie tylko Kurs systemu Unix 1
Tablice w bash-u Tablice można realizować za pomocą konstrukcji eval, ale jeżeli indeksami są liczby (od 0, jak w języku C) to prościej będzie użyć declare. Tworzenie tablicy: declare -a T Zapisywanie do tablicy: T[$i]=13 Odczytywanie elementów: echo ${T[$i]} Wszystkie elementy: echo ${T[*]} Kurs systemu Unix 2
O sterowaniu 2 zaległe słowa Instrukcja break ma parametr, liczba mówiąca z ilu poziomów pętli mamy wyskoczyć. Domyślną jej wartością jest 1, co oznacza wyskok z najbardziej wewnętrznej pętli. Kurs systemu Unix 3
Instrukcja select Umożliwia pisanie czegoś w rodzaju programów interakcyjnych. Składnia: select zmienna in lista do instrukcje done Definiujemy w ten sposób nieskończoną pętlę. Można z niej wychodzić za pomocą instrukcji break Kurs systemu Unix 4
Przykładowe zastosowanie echo "Wybierz ptaka:" select zmienna in pingwin kiwi kormoran do if [ $zmienna ] then echo "Wybraªe± ${zmienna}a" break else echo "Nic nie wybraªe±, a prosiªem..." echo "Spróbuj jeszcze raz!" fi done Kurs systemu Unix 5
Co widać na ekranie? Wybierz ptaka: 1) pingwin 2) kiwi 3) kormoran #? [ENTER] 1) pingwin 2) kiwi 3) kormoran #? 6 Nic nie wybraªe±, a prosiªem... Spróbuj jeszcze raz! #? 2 Wybraªe± kiwia Kurs systemu Unix 6
Sygnały W pewnych sytuacjach do procesu wysyłane są sygnały (np. kończące procesy). Za pomocą polecenia trap można przechwytywać sygnały. Składnia: trap polecenia sygnaª lub trap -l. Przypisanie poleceń sygnałowi lub polecenie wypisania numerów sygnałów i ich skrótów. Kurs systemu Unix 7
Niektóre sygnały SIGINT użytkownik wpisuje znak przerwania (Ctrl-C) SIGKILL zakończenie (nieignorowalne, numer 9) SIGALRM budzik (upłynął kawałek czasu) SIGTERM grzeczna prośba o zakoćzenie SIGCHLD zakoćzył pracę proces potomny SIGPIPE nieprawidłowe działanie potoku między procesami Kurs systemu Unix 8
Użycie polecenia trap trap "echo proba przerwania" SIGINT input=a while [ "$input" == "a" ] do echo "Wpisz 'a' by kontynuowac, inny znak by zakonczyc" read input done echo "Skrypt zakonczony" Kurs systemu Unix 9
Dwa słowa o procesach Proces to działający program. Procesy mają rodziców i mogą mieć dzieci. Wywoływanie w tle: polecenie & Polecenie ps oraz kill. PID TTY TIME CMD 18237 pts/6 0:00 bash 1291 pts/2 0:00 vi 27919 pts/9 0:00 mailtool Kurs systemu Unix 10
Zatrzymywanie procesów ( while true; do x=1; done ) & PID TTY TIME CMD 18237 pts/6 0:00 bash 19701 pts/6 0:54 bash usunięcie: kill -9 19701 18237 pts/6 0:00 bash [1]+ Killed ( while true; do x=1; done ) Kurs systemu Unix 11
Kilka użytecznych poleceń date Polecenie wyświetla (oraz zmienia) datę. Przykład ~> date '+DATE: %m/%d/%y%ntime:%h:%m:%s' DATE: 03/11/02 TIME:13:18:05 Kurs systemu Unix 12
Polecenie cal Wyświetla kalendarz na dowolny rok lub miesiąc. Uwzględnia reformy kalendarza (przejście na gregoriański, itp) Składnia: cal [ [miesi c] rok ], podane jako liczby. Brak opcji oznacza bieżący miesiąc. Przykład: ~> cal 3 3003 March 3003 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Kurs systemu Unix 13
Polecenie finger Wyświetla różne informacje o użytkowniku. Argumentem jest login użytkownika, jego imię bądź nazwisko. Te informacje to: imię, nazwisko, login, katalog domowy i używana powłoka, kiedy się logował ostatnio i z jakiego komputera, kiedy przeczytał pocztę i czy ma jakieś plany. Plany zapisane są w pliku.plan. Kurs systemu Unix 14
Sposoby komunikacji między użytkownikami Poczta elektroniczna (mail, elm, pine,...) Komunikaty: write, wall, mesg. Programy do konwersacji (talk adres [terminal]). Kurs systemu Unix 15
Obsługa poczty Polecenie mail służy do wysyłania bądź odczytywania wiadomości pocztowych Zdecydowanie częściej do nadawania listów (ze skryptów), do odbioru bardziej nadają się interakcyjne programy, jak pine czy elm Są też oczywiście okienkowi klienci poczty, np.: kmail Przykład (nadawanie): mail -s "temat" odbiorca < plik-z-listem Kurs systemu Unix 16
Klient poczty elm Elm to interaktywny program obsługi poczty uruchamiany poleceniem elm. Program umożliwia: przeglądanie, kasowanie, zapamietywanie wiadomości, odpowiadanie na listy, tworzenie nowych za pomocą edytora (domyślnie vi), obsługę różnych folderów poczty, tworzenie aliasów (klawisz a), dołączanie plików do listu ( też klawisz a, ale kiedy indziej) drukowanie listów (klawisz p), Kurs systemu Unix 17
Obsługa komunikatów Polecenie write wysyła komunikat na konsolę innego użytkownika. Składnia: write nazwa-uz [terminal] Polecenie who umożliwia przejrzenie potencjalnych adresatów Treść podaje się z konsoli (przerywany znakiem końca pliku, czyli ^D). Można wysłać coś do wszystkich (polecenie wall). Polecenie mesg y n pozwala na odrzucanie komunikatów. Kurs systemu Unix 18
Z innej beczki: polecenie more Interaktywne polecenie wyświetlające zawartość pliku Skladnia: more nazwapliku Komendy more ispace i/wzorzec h!command. powtarza ostatnią komendę q wyjście z programu wyświetla następny ekran lub i linii wyszukuje i-te wystąpienie wzorca wypisuje listę dostępnych poleceń wykonuje polecenie powłoki Często jest bogatszy wariant polecenia more o skromnej nazwie less, który umożliwia cofanie się w pliku. Kurs systemu Unix 19
Plik z historia poleceń Plik z ostatnimi poleceniami to $HISTFILE. Można g wyświetlic: w całości, pisząc history ostatnie n linii, pisząc history n. Korzystanie z pliku historii:!! powtarza poprzednią komendę!n powtarza komendę n-tą!-n!str!?str? powtarza n-tą od końca komendę powtarza ostatnią komendę zaczynającą się od str powtarza ostatnią komendę zawierającą się str Kurs systemu Unix 20
Drobne (acz użyteczne) polecenia head bierze pierwsze linie z pliku (przykładowo head -10) tail wyświetla końcówkę pliku (tail -5), clear wymazuje ekran terminalu, split oraz csplit dzielą pliki, za kryterium biorąc wielkość lub inne rzeczy (tak powstałe pliki możemy połaczyć za pomocą cat). diff znajduje różnice między plikami tekstowymi. Dla plików binarnych lepiej używać cmp. Kurs systemu Unix 21
Tworzenie linków Za pomocą linków można tworzyć w pewnym miejscu drzewa katalogów złudzenie pliku, który tak naprawdę jest gdzie indziej. Mamy dwa rodzaje łączy: 1. łącze twarde (wskaźnik na miejsce na dysku) 2. łącze symboliczne (zapamiętana jest ścieżka dostępu do pliku) do tworzenia łącza symbolicznego używamy opcji -s. składnia jak cp, czyli ln -s nazwa-pliku nazwa-ª cza. Polecenie ls wyświetla, co następuje: lrwxrwxrwx 1 prych 101 25 mar 18 12:53 link -> /home/prych/dyd/kursunixa/ Kurs systemu Unix 22