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.

Zmienne w skryptach

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

 

Pętla „for” w skryptach

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.