w02
w02
w02
1. wypisuje monit,
2. czeka na wprowadzenie tekstu z klawiatury,
3. analizuje wiersz polecenia i znajduje program,
4. zleca jądru wykonanie programu,
5. przyjmuje odpowiedź od jądra, ponownie wypisuje monit.
1. /etc/zprofile
2. /etc/zlogin
3. /etc/zshrc
4. /etc/zshenv
... odpowiedniki kropkowe powyższych plików w katalogu domowym.
Programowanie w języku powłoki sh
tnowak:hasło zakodowane:201:50::/usr/tnowak:/bin/sh
wheel::10:tnowak,tkruk
Inne zagadnienia:
• prawa dostępu do pliku (-rwxr-xr-x, 0755, komenda chmod),
• plik /etc/shadow.
2
Programowanie w języku powłoki sh
[7] Polecenia
Postać polecenia
Polecenia wbudowane
$ PATH=$PATH:/usr/local/bin
$ export PATH
3
Programowanie w języku powłoki sh
$0-9 także: opcje przypisane powłoce przy wywołaniu lub przez set,
[9] Metaznaki
Podczas opracowywania nazw plików oraz przy grupowaniu komend w większe całości
stosuje się znaki o specjalnym znaczeniu dla interpretera nazywane metaznakami.
4
Programowanie w języku powłoki sh
[11] Grupowanie
• przyjęto konwencję, że argumenty które nie są nazwami plików należy poprzedzać
znakiem minus –.
• komendy mogą być grupowane w nawiasy:
– nawiasy okrągłe ( ciąg-komend ) służą do grupowania komend, które będą
wykonywane jako samodzielny proces. Proces ten może być również wyko-
nywany w tle (&).
– nawiasy klamrowe { ciąg-komend; } służą do grupowania komend, które będą
normalnie wykonywane w ramach bieżącego procesu.
• końcem komendy są następujące znaki: <NL> ; &
5
Programowanie w języku powłoki sh
$ chmod +x plik_z_cmd
• do sterowania przebiegiem procedury powłoki służą instrukcje takie, jak: if, for,
while, until, case
• możliwe jest skrócenie zapisu if, przy użyciu znaków:
And-if && (gdy rezultat równy zero)
Or-if || (gdy rezultat różny od zera)
$ cp x y && vi y
$ cp x y || cp z y
• Każda komenda umieszcza w $? status z jakim zakończyło się jej wykonanie. Sta-
tus 0 oznacza pomyślne zakończenie działania procesu. Status niezerowy oznacza
wystąpienie błędu podczas wykonywania się komendy.
[15] Instrukcja if
if ciąg_komend_1
then ciąg_komend_2
{else ciąg_komend_3}
fi
• przykład
if cc -c p.c
then
ld p.o
else
echo "compilation error" 1>&2
fi
6
Programowanie w języku powłoki sh
case słowo in
wzór_1) lista_komend_1;;
wzór_2) lista_komend_2;;
*) lista_komend_domyślnych;;
esac
• przykład
case $# in
0) echo ’usage: man name’ 1>&2; exit 2;;
• instrukcja for, której treść jest wykonywana jednorazowo dla każdego słowa
w liście słów,
• instrukcja while, której treść jest wykonywana tak długo, jak długo jest speł-
niony warunek w while,
• instrukcja until, której treść jest wykonywana tak długo, aż nastąpi spełnie-
nie warunku w until.
#!/bin/sh
for i in /tmp /usr/tmp
do
rm -rf $i/*
done
7
Programowanie w języku powłoki sh
• #!/bin/sh
i=1
while [ $i -le 5 ]; do
echo $i
i=‘expr $i + 1‘
done
• $ who -r
. ru-level 2 Aug 21 16:58 2 0 S
$ set ‘who -r‘
$ echo $6
16:58
#!/usr/bin/zsh
PATH=/usr/bin:/usr/local/bin:/bin
WAIT_TIME=5
. /export/home/oracle/.zshenv
#sprawdz czy jest sens go sprawdzac..
PID=‘ps -ef | grep LISTENER | grep -v grep | awk -e ’{print $2 }’‘
if test -z "$PID"
then
exit 0
fi
# sprawdz jak dziala
lsnrctl status >/dev/null 2>&1 &
sleep $WAIT_TIME
kill $! 2>/dev/null
res="$?"
if test "$res" != "1"
then
kill $PID
kill -9 $PID
logger -p user.err Oracle LISTENER ERROR (stunned) - restarted
lsnrctl start
fi