Wstęp do systemów wielozadaniowych laboratorium 21 — bash
Jarosław Piersa
Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika
2013-01-15
Echo
#! / b i n / b a s h
echo ” H e l l o w o r l d ”
Echo i read
#! / b i n / b a s h
echo ” P o d a j j a k i s n a p i s ” r e a d zmienna
echo ” p o d a l e s n a p i s : ” $ zmienna
Zad. Napisz skrypt, który się przywita z użytkownikiem
if .. else
#! / b i n / b a s h
# w a r u n e k i f
echo ” P o d a j n a p i s \ ”B r z e c z y s z c z y k i e w i c z \” ” r e a d n a p i s
i f [ $ n a p i s = ” B r z e c z y s z c z y k i e w i c z ” ] ; then
#JP ˆ ˆ ˆ ˆ t e s p a c j e s a wazne ! !
echo ” P o d a l e s p o p r a w n y n a p i s ” e l s e
echo ” N i e l a t w i e j b y l o b y go s k o p i o w a c ? ” f i
Zad. Napisz skrypt, który poprosi użytkownika o potwierdzenie wyświetlenia pliku, zanim faktycznie go wyświetli
if .. elif .. else
#! / b i n / b a s h
echo ” P o d a j n a p i s \ ”B r z e c z y s z c z y k i e w i c z \” ” r e a d n a p i s
i f [ $ n a p i s = ” B r z e c z y s z c z y k i e w i c z ” ] ; then echo ” P o d a l e s p o p r a w n y n a p i s ”
e l i f [ $ n a p i s = ” b r z e c z y s z c z y k i e w i c z ” ] ; then echo ” Chyba k l a w i s z s h i f t s i e z a c i a l ” e l s e
echo ” N i e l a t w i e j b y l o b y go s k o p i o w a c ? ” f i
Czy istnieje plik
#! / b i n / b a s h
echo ” p o d a j nazwe p l i k u l u b k a t a l o g u ” r e a d nazwa
i f [ −d $nazwa ] ; then
cd $nazwa
e l i f [ −f $nazwa ] ; then c a t $nazwa
e l s e
echo ” n i e p o p r a w n a s c i e z k a ” f i
Zad. Napisz skrypt, który automatycznie wyświetla plik tekstowy lub listuje katalog.
Pętla for
#! / b i n / b a s h
f o r i i n { 1 . . 1 0 } ; do
echo $ i ” ˆ2 = ” ‘ e x p r $ i \∗ $ i ‘ done
Zad. Napisz skrypt, który rysuje romb o boku n
Argumenty wywołania
#! / b i n / b a s h
echo ” s k r y p t nazywa s i e ” $0
echo ”ma ” $# ” argumentow ”
echo ” p i e r w s z e t r z y t o ” $1 ” ” $2 ” ” $3 echo ” a p o z o s t a l e ”
f o r i i n $∗ ; do
echo $ i done
Zad. Napisz skrypt, który oblicza sumę podanych argumentów
Pętla for (w stylu c)
#! / b i n / b a s h
# t a w e r s j a f o r a w s t y l u c d z i a l a w bashu , f o r ( ( i =10; i >0; i − −));
do
echo $ i ” ˆ2 = ” ‘ e x p r $ i \∗ $ i ‘ done
Zad. Napisz skrypt, który oblicza sumę liczb od 1 do wczytanej
Pętla for po plikach w katalogu
#! / b i n / b a s h
f o r f i n ∗ . s h ; do
echo $ f c a t $ f done
Zad. Napisz skrypt, który wykonuje kopię wszystkich plików w katalogu: plik → plik.bak
Pętla while
#! / b i n / b a s h
w=” a l a ” i =0
echo ” n a p i s z \ ”k o n i e c \” aby z a k o n c z y c ”
w h i l e [ $w != ” k o n i e c ” ] ; do
r e a d w
i =‘ e x p r $ i + 1 ‘ ; done
echo ” Z a j e l o c i ” $ i ” p r o b ( y ) aby z a k o n c z y c s k r y p t ”
Pętla while + case
#! / b i n / b a s h
w h i l e t r u e ; do
r e a d a
c a s e $a i n
” ”) c o n t i n u e
; ;
”mam d o s c ”) b r e a k
; ;
∗ )
echo ” N a p i s a l e s : ” $a c o n t i n u e
; ; e s a c
done
Zmienne specjalne
#! / b i n / b a s h
echo $0 echo $∗
echo $1 echo $2 echo $#
echo $$
a=3
# $? j e s t kodem b l e d u zwroconym p r z e z o s t a t n i a o p e r a c j e echo $?
# $? == 0 −− o p e r a c j a z a k o n c z o n a p o m y s l n i e l s / r o o t 2> / d e v / n u l l
Arytmetyka
#! / b i n / b a s h
a =‘ e x p r 2 + 2 \∗ 2 ‘
i f [ $a −eq 6 ] ; then echo ” a=6”
f i
i f [ $a −ge 4 ] ; then echo ” a>=4”
f i
i f [ $a −le 8 ] ; then echo ” a<=8”
f i
i f [ $a −gt 4 ] ; then echo ” a>4”
i f [ $a −lt 8 ] ; then echo ” a<8”
f i
i f [ $a −ne 0 ] ; then echo ” a !=8 ” f i
i f [ $a −gt 0 −a $a −lt 10 ] ; then
echo ” 0 < a < 10 ” f i
i f [ $a −lt 0 −o $a −gt 5 ] ; then
echo ” a<0 | | a>5”
f i
Zadanie domowe 1
Napisz skrypt w bash, który
skompiluje za pomocągcc wszystkie pliki o rozszerzeniu.ci za pomocąg++pliki o rozszerzeniucpp w bieżącym folderze kompilacja ma być z flagą-o nazwa pliku
np.plik o nazwieala ma kota.cma być skompilowany komendą: gcc -o ala ma kota ala ma kota.c
na koniec wyświetli podsumowanie ile kompilacji dokonał i ile zakończyło się powodzeniem
Zadanie domowe 2
Napisz skrypt bashowy, który będzie inteligentnymls / less-em jeżeli zostanie wywołany bez dodatkowych argumentów, to wylistuje bieżący katalog
jeżeli zawiera dodatkowe argumenty to wylistuje je (ls), jeżeli są katalogami
wyświetli ich zawartość (less), jeżeli są plikami
wyświetli stosowny komunikat, jeżeli podany argument nie jest plikiem w systemie
dodatkowo może przechwycić i przekazać opcjonalne parametry dols-a np. -l -a itp. (punkt nieobowiązkowy)