Proszę nie pisać skryptów, które działają po wylogowaniu się z systemu. Jeśli ktoś napisze taki skrypt z konieczności, proszę pamiętać o posprzątaniu w systemie. (Polecam komendę kill J)
Skrypty
Przykład prostego skryptu przedstawiono poniżej. Skrypt wypisuje na ekran tekst „ok” i wykonuje polecenie uptime. Pierwsza linia oznacza, że skrypt będzie używał shell’a sh. Przed uruchomieniem każdego skryptu należy zmienić mu prawa dostępu.
> cat 1skrypt.skr #!/bin/sh echo ok uptime > ./1skrypt.skr ok 11:31AM up 29 days, 2:22, 4 users, load average: 0.15, 0.14, 0.13 > |
W skryptach można używać wszystkich poleceń powłoki, jakiej używa dany skrypt. Z tego powodu polecenie w skrypcie przedstawionym w poniższym przykładzie nie zadziała prawidłowo.
> cat 2skrypt.skr #!/bin/sh echo nie działa alias psk ps -u kowalski > chmod u+x *.skr > > ./2skrypt.skr nie działa ./2skrypt.skr: alias: not found. |
Poza poleceniami danego shell’a w skryptach można wykorzystywać:
· zmienne,
· pętle,
· zdania logiczne.
W kolejnym przykładzie przedstawiono prosty skrypt wypisujący na ekranie zmienną ZM.
> ./3skrypt.skr 3 > cat 3skrypt.skr #!/bin/sh ZM=3 echo $ZM > |
Skrypty mogą być uruchamiane z argumentami, które następnie mogą być wykorzystywane w poleceniach wykonywanych przez skrypt.
> ./4skrypt.skr a a > ./4skrypt.skr b b > ./4skrypt.skr 132 132 > cat 4skrypt.skr #!/bin/sh echo $1 > |
Argumenty te są numerowane i oznaczane przez kolejne zmienne 1..9. Zmienna 0 określa nazwę skryptu, zaś zmienna @ wszystkie argumenty skryptu.
> ./5skrypt.skr a1 a2 a3 a4 a5 a6 a7 a8 ./5skrypt.skr a1 a1 a2 a3 a4 a5 a6 a7 a8 > cat 5skrypt.skr #!/bin/sh echo $0 echo $1 echo $@ > |
Proszę wyjaśnić, co dzieje się w przykładzie poniżej. UWAGA: skrypt ten jest źle napisany. Dlaczego?
> cat 6skrypt.skr #!/bin/sh echo $1 echo $12 echo $@ > ./6skrypt.skr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a1 a12 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 |
W poniższym przykładzie zaprezentowano działanie pętli for w skrypcie:
> cat 7skrypt.skr #!/bin/sh for ZMIENNA in $@ do echo $ZMIENNA done |
Jeśli powyższy skrypt zostanie wywołany z argumentami, to zostaną one wypisane na ekranie. Zmienna $@, oznaczająca wszystkie argumenty z jakimi skrypt został wywołany, jest w tym przykładzie zbiorem wartości, które przyjmuje ZMIENNA. W przykładzie podkreślono wszystkie słowa pętli for.
Inny przykład:
> cat 8skrypt.skr #!/bin/sh for ZMIENNA in `cat lista` do echo usuwam $ZMIENNA rm $ZMIENNA done > > chmod u+x 8skrypt.skr > touch a b c d > echo b c d a > lista > ./8skrypt.skr usuwam b usuwam c usuwam d usuwam a > |
Proszę napisać skrypt, który:
· będzie dopisywał do pliku argumenty, z którymi został wywołany,
· wypisze użytkowników używających określonego shella (proszę wykorzystać argumenty),
· *** będzie „spał” przez minutę, a następnie sprawdzi, czy w systemie pracuje użytkownik .............. (następne nazwisko na liście obecności, albo dowolne – argument skryptu): jeśli pracuje to wyśle do niego banner „KOLEŚ” (albo inny, podany jako argument skryptu), jeśli nie pracuje to zaczeka następną minutę i znowu sprawdzi; dopiero po wysłaniu bannera skrypt ma zakończyć działalność. SKRYPT MA PRACOWAĆ PO WYLOGOWANIU, ale po zakończeniu laboratorium proszę posprzątać. Jeśli komuś się nie uda napisanie tego skryptu: na następnym laboratorium będą podane niezbędne komendy.