Fragmenty artykułów z książek wydawnictwa Helion.pl
Dodano: piątek, 24 luty 2012r.
Fragment (druga, ostatnia część) rozdziału nr 4 Tworzenie skryptów powłoki z książki: Linux. Komendy i polecenia. Wydanie III.
Polecenie test
służy do porównywania liczb lub ciągów znaków i wypisywania do zmiennej wartości porównania.
-d
Parametr sprawdza, czy plik o podanej nazwie jest katalogiem.
#!/bin/bash
test -d plik.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
1
-f
Parametr sprawdza, czy plik jest zwykłym plikiem, czy też z prawami do wykonywania.
#!/bin/bash
test -f plik.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
0
-L
Parametr sprawdza, czy plik jest dowiązaniem symbolicznym.
#!/bin/bash
test -L plik.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
1
-r
Parametr sprawdza, czy dany plik istnieje i czy można go odczytać.
#!/bin/bash
test -r plik.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
0
-w
Parametr sprawdza, czy dany plik istnieje i czy można go zapisać.
#!/bin/bash
test -w plik.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
0
-x
Parametr sprawdza, czy plik o danej nazwie istnieje i czy można go uruchomić.
#!/bin/bash
test -x plik.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
1
-s
Parametr sprawdza, czy dany plik został zapisany na dysku i czy jego wartość (długość) nie jest zerowa.
#!/bin/bash
test -s plik.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
0
-nt
Parametr sprawdza, czy plik1 jest nowszy od plik2.
#!/bin/bash
test plik.txt -nt plik2.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
1
-ot
Parametr sprawdza, czy plik1 jest starszy od plik2.
#!/bin/bash
test plik.txt -ot plik2.txt
echo $?
[lukasz@localhost ~]$ ./skrypt
0
=
Parametr sprawdza, czy ciągi podane po jego obu stronach są identyczne.
#!/bin/bash
test "abc"="abc"
echo $?
[lukasz@localhost ~]$ ./skrypt
0
!=
Parametr sprawdza, czy ciągi podane po jego obu stronach nie są identyczne.
#!/bin/bash
test "abc"!="abc"
echo $?
[lukasz@localhost ~]$ ./skrypt
1
-z
Parametr sprawdza, czy ciąg podany za nim ma zerową długość.
#!/bin/bash
test -z abc
echo $?
[lukasz@localhost ~]$ ./skrypt
1
-n
Parametr sprawdza, czy ciąg podany za nim ma niezerową długość.
#!/bin/bash
test -n abc
echo $?
[lukasz@localhost ~]$ ./skrypt
0
-eq
Parametr sprawdza, czy wartości podane po jego obu stronach są sobie równe.
#!/bin/bash
test 1 -eq 1
echo $?
[lukasz@localhost ~]$ ./skrypt
0
-ne
Parametr sprawdza, czy wartości podane po jego obu stronach nie są sobie równe.
#!/bin/bash
test 1 -ne 1
echo $?
[lukasz@localhost ~]$ ./skrypt
1
-gt
Parametr sprawdza, czy pierwsza wartość jest większa od drugiej.
#!/bin/bash
test 2 -gt 1
echo $?
[lukasz@localhost ~]$ ./skrypt
0
-ge
Parametr sprawdza, czy pierwsza wartość jest większa lub równa drugiej.
#!/bin/bash
test 2 -ge 1
echo $?
[lukasz@localhost ~]$ ./skrypt
0
-lt
Parametr sprawdza, czy pierwsza wartość jest mniejsza od drugiej.
#!/bin/bash
test 2 -lt 1
echo $?
[lukasz@localhost ~]$ ./skrypt
1
-le
Parametr sprawdza, czy pierwsza wartość jest mniejsza lub równa drugiej.
#!/bin/bash
test 2 -le 1
echo $?
[lukasz@localhost ~]$ ./skrypt
1
!
Parametr ten służy do negowania testu, bardzo często stosuje się go w instrukcjach warunkowych i w pętlach.
Instrukcja sprawdza, czy dany warunek jest spełniony, i w zależności od tego wykonuje odpowiednie czynności.
if wartość
then
zrób coś
fi
Najprostszy wariant polecenia if
#!/bin/bash
if [ 1 = 1 ]
then
echo Wartosci sa rowne
fi
Przykład skryptu sprawdzającego, czy wartości są równe.
[lukasz@localhost ~]$ ./skrypt
Wartosci sa rowne
Ten warunek sprawdza, czy wartość jest spełniona, i w zależności od wyniku sprawdzenia wykonuje określoną operację (wartość spełniona — zrób coś
, w przeciwnym wypadku — zrób coś innego
).
if wartość
then
zrób coś
else
zrób coś innego
fi
#!/bin/bash
if [ 1 = 2 ]
then
echo Wartosci sa rowne
else
echo Wartosci sa rozne
fi
Przykład skryptu sprawdzającego, czy wartości są równe, czy też nie.
[lukasz@localhost ~]$ ./skrypt
Wartosci sa rozne
Polecenie sprawdza, czy warunki są spełnione. W przypadku, gdyby którykolwiek z warunków został spełniony, wykona polecenie.
W przypadku, gdyby żaden z warunków nie został spełniony, wykona ono funkcję zrób coś innego
.
If wartość
then
zrób coś
elif wartość2
then
zrób coś 2
elif ...
...
else
zrób coś innego
di
Instrukcja case
sprawdza, czy warunek ma odpowiednią wartość, a następnie przechodzi do odpowiedniego fragmentu kodu w programie.
Case warunek in
odpoweidz1)
zrob coś 1
;;
Esac
Przykład skryptu sprawdzającego, jaką wartość ma liczba.
#!/bin/bash
wartosc=1
case "$wartosc" in
1)
echo Liczba ma wartosc 1
;;
2)
echo Liczba ma wartosc 2
;;
Esac
[lukasz@localhost ~]$ ./skrypt
Liczba ma wartosc 1
Pętla while
powtarza wykonywanie określonych czynności dopóty, dopóki warunek w niej podany nie zostanie spełniony.
While polecenie
do
zrob coś
done
Oto skrypt z pętlą while
wyświetlający liczbę i po każdym przejściu pętli (wykonaniu fragmentu skryptu) zwiększający ją o jeden. W przypadku, gdy liczba jest równa 2
, skrypt kończy działanie.
#!/bin/bash
i=0
while [ $i -lt 2 ]
do
echo $i
i=`expr $i + 1`
done
[lukasz@localhost ~]$ ./skrypt
0
1
Pętla until
powtarza polecenie w niej zapisane dopóty, dopóki warunek nie zostanie spełniony.
Until polecenie
do
zrob coś
done
Pętla for
powtarza daną czynność żądaną liczbę razy (określoną w podanej do niej liczbie wykonań).
For zmienna in lista
do
zrob coś
done
Pętla for
, która wyświetla w kolejnych liniach wszystkie wymienione w niej owoce.
#!/bin/bash
for owoc in Jablko Pomarancza Cytryna
do
echo $owoc
done
[lukasz@localhost ~]$ ./skrypt
Jablko
Pomarancza
Cytryna
Polecenie break
kończy działanie pętli, jeżeli podamy warunek do jej zakończenia.
#!/bin/bash
for owoc in Jablko Pomarancza Cytryna
do
echo $owoc
if [ "$owoc" = "Pomarancza" ]
then
break
fi
done
Ten skrypt ma zakończyć działanie (za pomocą polecenia break) po pojawieniu się tekstu Pomarancza
.
[lukasz@localhost ~]$ ./skrypt
Jablko
Pomarancza
Polecenie continue
wymusza przejście do kolejnej iteracji, czyli następnego kroku.
#!/bin/bash
for owoc in Jablko Pomarancza Cytryna
do
echo $owoc
if [ "$owoc" = "Pomarancza" ]
then
continue
fi
echo tekst przerywnika
done
W napisanym przez nas kodzie zadaniem instrukcji continue
jest ukrycie napisu tekst przerywnika
podczas przetwarzania „owocu”: Pomarancza
.
[lukasz@localhost ~]$ ./skrypt
Jablko
tekst przerywnika
Pomarancza
Cytryna
tekst przerywnika
Wszystkie napisane przez nas skrypty powłoki mogą przyjmować argumenty. Do argumentów wysłanych po uruchomieniu skryptu odwołujemy się za pomocą zmiennych $1, $2, $3 ... $n
.
#!/bin/bash
echo "Dzisiaj pogoda była $1"
Przykładowy skrypt pobierze pierwszą wartość za jego nazwą i wstawi ją w miejsce $1
, a następnie wyświetli ją na ekranie.
[lukasz@localhost ~]$ ./skrypt super
Dzisiaj pogoda była super
Pierwsza cześć:
http://www.linuxportal.pl/artykuly/tworzenie-skryp/.../1-id112965
Wpisy z bloga/ TOP