1. 1
PODSTAWY INFORMATYKI
dr inż. Krzysztof Małecki
Operatory || i &&
• polecenie1 || polecenie2
• polecenie1 && polecenie2
• Operator OR ( || ) spowoduje wykonanie polecenia2
tylko wtedy, gdy polecenie1 zakończy się
niepowodzeniem.
• Operator AND ( && ) spowoduje wykonanie polecenia2
jedynie wtedy, gdy polecenie1 zwróci kod wyjścia 0.
2. 2
Polecenia testujące i wyrażenia testowe
• Sprawdzają wartość wyrażenia testowego wyrażenie i
jeśli jest prawdziwe, zwracają wartość 0, w przeciwnym
wypadku wartość różną od 0:
– test wyrażenie
– [ wyrażenie ]
• Przykład:
– test „$zmienna” = „informatyka”
– [ „$zmienna” = „informatyka” ]
• 0 gdy wartość zmiennej równa się łańcuchowi
informatyka
Uwaga: W poleceniach testujących jest konieczne
odseparowanie operandów od operatorów – znak spacji.
Przykładowe wyrażenia testowe
• Dla liczb całkowitych
a –eq b a=b
a –ne b a≠b
a –le b a≤b
a –lt b a<b
a –ge b a≥b
a –gt b a>b
3. 3
Przykładowe wyrażenia testowe
• Dla łańcuchów
-z łańcuch łańcuch ma długość 0
-n łańcuch łańcuch ma niezerową długość
łańcuch1 == łańcuch2 są identyczne
łańcuch1 != łańcuch2 są różne
Przykładowe wyrażenia testowe
• Dla plików
-e plik plik istnieje
-d plik plik istnieje i jest katalogiem
-r plik plik istnieje i jest do czytania
-w plik plik istnieje i jest zapisywalny
-x plik plik istnieje i jest wykonywalny
plik1 –nt plik2 plik1 jest nowszy od plik2
plik1 –ot plik2 plik1 jest starszy od plik2
4. 4
Logiczne wyrażenia testowe
( wyrażenie ) wyrażenie jest prawdziwe
! wyrażenie wyrażenie jest fałszywe
wyr1 –a wyr2 wyr1 i wyr2 są prawdziwe
wyr1 –o wyr2 wyr1 lub wyr2 są prawdziwe
Instrukcja if
if polecenie_testujące
then
polecenia_do_wykonania
fi
polecenia_do_wykonania zostaną wykonane, gdy
polecenie_testujące zwróci wartość 0
(czyli gdy jest prawdziwe)
if polecenie_testujące
then
polecenia_do_wykonania1
else
polecenia_do_wykonania2
fi
5. 5
Elif = else if
if polecenie_testujące1
then
polecenia_do_wykonania1
else
if polecenie_testujące2
then
polecenia_do_wykonania2
fi
fi if polecenie_testujące1
then
polecenia_do_wykonania1
elif polecenie_testujące2
then
polecenia_do_wykonania2
fi
Instrukcja case
testowana wartość jest
porównywana z kolejnymi
wartościami od wzorzec1 do
wzorzecN
We wzorcach można
stosować: znaki
uogólniające (*, ?) oraz
zbiory znaków ( [a-z], [2-9] )
* ) - wartość domyślna
(jeśli nie pasuje żaden z
wzorców) i jest opcjonalna
case testowana_wartość in
wzorzec1 )
ciąg_poleceń1
;;
wzorzec2 )
ciąg_poleceń2
;;
…
wzorzecN )
ciąg_poleceńN
;;
* )
ciąg_poleceń
;;
esac
6. 6
Pętla for
Instrukcja for służy do wykonywania określonej grupy
poleceń dla kilku wartości danej zmiennej.
Lista_poleceń wykonywana dla każdego parametru z
listy_słów; zmienna w kolejnej iteracji zastępowana kolejnym
parametrem z listy_słów.
Pominięcie [in lista_słów] powoduje przyjęcie, że lista_słów jest
łańcuchem zawierającym wszystkie parametry wywołania
($1 $2 $3 …)
for zmienna [in lista_słów]
do
lista_poleceń
done
Pętla for - przykład
Skrypt kopiujący wszystkie pliki,
których nazwy są zapisane w pliku p1,
do katalogu kat1 znajdującego się w
folderze nadrzędnym.
#!/bin/bash
for A in ‘cat p1’
do
echo „Kopiowanie pliku $A”
cp $A ../kat1
done
for zmienna [in lista_słów]
do
lista_poleceń
done
7. 7
Pętla for – inna forma
Postać analogiczna do pętli for w języku C.
Lista_poleceń wykonywana po obliczeniu wyr1 i sprawdzeniu,
że wyr2 jest prawdziwe; obliczane jest wyr3 i sprawdzany
warunek wyr2.
Pętla kończy działanie, gdy wyr2 będzie fałszywe.
for ( ( wyr1; wyr2; wyr3 ) )
do
lista_poleceń
done
Pętla for - przykład
Skrypt wypisujący liczby całkowite od 1 do 5.
#!/bin/bash
for ( ( A=1; A<=5; A++) )
do
echo „$A”
done
for ( ( wyr1; wyr2; wyr3 ) )
do
lista_poleceń
done
8. 8
Pętla while
Polecenia objęte zakresem pętli while są wykonywane tak
długo jak długo polecenie_testujące zwraca wartość 0
(wyrażenie jest prawdziwe)
while polecenie_testujące
do
lista_poleceń
done
Pętla while - przykład
Skrypt wyświetlający kolejne parametry swojego wywołania.
while polecenie_testujące
do
lista_poleceń
done
#!/bin/bash
while [ $1 ]
do
echo „$1”
shift
done
9. 9
Pętla until
Polecenia objęte zakresem pętli until są wykonywane tak
długo aż polecenie_testujące zwróci wartość 0 (testowane
wyrażenie przyjmie wartość prawdy)
until polecenie_testujące
do
lista_poleceń
done
Pętla until - przykład
Skrypt wypisujący kolejno a, aa, aaa, aaaa.
#!/bin/bash
zmienna=„”
Until [ „$zmienna” == aaaa ]
do
zmienna=${zmienna}a
echo $zmienna
done
until polecenie_testujące
do
lista_poleceń
done
10. 10
Polecenia break i continue
Polecenia do kontrolowania wykonania pętli. Break
przerywa działanie pętli. Continue powoduje pominięcie
pozostałych instrukcji z pętli i przejście do kolejnej iteracji.
Break, continue - przykład
1. Skrypt wypisujący wartości parametrów pozycyjnych do
momentu napotkania parametru, którego wartość jest
cyfrą.
2. Skrypt wypisujący tylko te wartości parametrów
pozycyjnych, które nie są cyframi.
Polecenie break
#!/bin/bash
for I
do
case $I in
[0-9] )
break #przerwanie gdy wartością zmiennej jest cyfra
;;
* )
echo $I
;;
esac
echo „To nie była cyfra”
done
11. 11
Polecenie continue
#!/bin/bash
for I
do
case $I in
[0-9] )
continue #przejście do kolejnej iteracji, gdy wartością
zmiennej jest cyfra
;;
* )
echo $I
;;
esac
echo „To nie była cyfra”
done
Polecenie grep
Instrukcja realizuje wyszukiwanie w tekście linii pasujących do
określonego wzorca.
grep [opcje] wzorzec [plik]
Jeśli plik nie zostanie wskazany, dane są pobierane ze
standardowego wejścia.
Znaki specjalne używane we wzorcach polecenia grep:
. dowolny znak
znosi znaczenie znaku specjalnego
[…] dowolny znak ze zbioru, np. [ab]
[^…] dowolny znak spoza zbioru
* zero lub więcej wystąpień wyrażenia poprzedz. *
^ początek wiersza
$ koniec wiersza
12. 12
Okna dialogowe
• Okna w skryptach shellowych, za pomocą których
można tworzyć listy wyboru, zadawać pytania i
pobierać dane od użytkownika, bądź też
informować użytkownika o przebiegu pewnych
operacji, które skrypt w danej chwili wykonuje.
dialog opcje okno_dialogowe
Okna dialogowe – rodzaje
• yesno
• menu
• inputbox
• textbox
• infobox
• checklist
• radiolist
• gauge
13. 13
Okna dialogowe – opcje
• --clear - czyści ekran,
• --createrc plik - można użyć tej opcji do
wygenerowania przykładowego pliku
konfiguracyjnego,
• --separate-output - tę opcję stosuje się przy
widgetach checklist, drukuje wyjście w osobnych
liniach, co umożliwia przetwarzanie uzyskanych
danych przez inny program,
• --title - tytuł, na górze okna dialogowego,
• --backtitle - podtytuł, w tle okna dialogowego,
znajduje się w lewym górnym rogu ekranu.
Okno yesno
• Użytkownik otrzymuje pytanie, na które musi
odpowiedzieć tak lub nie.
--yesno tekst wysokość szerokość
#!/bin/bash
dialog --title "Okno yesno"
--yesno "Wybierz tak lub nie." 5 30
14. 14
Okno menu
• służy do prezentowania listy wyborów w postaci
menu,
• użytkownik może wybrać tylko jedną pozycję,
• wyświetlanych jest tyle wpisów ile jest podanych
jako wysokość_menu. Jeśli, jest ich więcej lista
będzie przewijana.
• posiada przyciski ok i cancel.
--menu tekst wysokość szerokość
wysokość_menu element opis
Okno menu – cd.
#!/bin/bash
dialog --title "Okno menu"
--backtitle "Kurs programowania w shellu"
--menu "Menu" 9 50 3
1 jeden
2 dwa
3 trzy
4 cztery
15. 15
Okno checklist
• Podobne do menu, z tą różnicą, iż można
zaznaczać lub odznaczać wiele wpisów
jednocześnie.
• Niektóre wpisy mogą być domyślnie włączane za
pomocą ustawienia status na on.
• Okno checklist posiada przyciski ok i cancel.
• Na stderr drukowana jest lista elementów, które
zostały wybrane.
--checklist tekst wysokość szerokość
wysokość_listy
Okno checklist – cd.
#!/bin/bash
dialog --clear --separate-output --title "Okno checklist"
--backtitle "Kurs programowania w shellu"
--checklist
"Tu można zaznaczać wiele wpisów naraz:" 10 70 4
"1" "pierwszy element" "off"
"2" "drugi element" "off"
"3" "trzeci element" "off"
"Cztery" "tu zaznaczone domyślnie" "on"
2> wynik
16. 16
Okno checklist – cd.
Okno radiolist
• Okno radiolist różni się od okna menu
tylko tym, że można zaznaczyć krzyżykiem
(wskazanie jego statusu na on), który
element menu zostanie wybrany.
--radiolist tekst wysokość szerokość
wysokość_listy
17. 17
Okno radiolist – cd.
#!/bin/bash
dialog --clear
--title "Okno radiolist"
--backtitle "Kurs programowania w shellu"
--radiolist "Można zaznaczyć tylko jeden wpis:" 10
70 4
"1" "pierwszy element" "off"
"2" "drugi element" "off"
"3" "trzeci element" "off"
"4" "czwarty element" "off"
Okno inputbox
• można pobierać od użytkownika jakieś dane.
--inputbox tekst wysokość szerokość
#!/bin/bash
dialog --title "Okno inputbox"
--inputbox "Pobieranie danych od użytkownika" 8
40 "Tu wpisz dane"
18. 18
Okno msgbox
• służy do wyświetlania komunikatów (np. informacja
o tym co skrypt robi, pomoc, itp.),
• ma tylko jeden przycisk ok.
--msgbox tekst wysokość szerokość
#!/bin/bash
dialog --title "Okno msgbox"
--msgbox "Tutaj można wstawić jakikolwiek tekst, na
przykład informacje o tym co skrypt robi, pomoc,
itp." 7 45
Okno infobox
• podobne do msgbox, jednak nie ma żadnego
przycisku,
• dialog skończy działanie po wyświetleniu danej
informacji,
• ekran nie jest czyszczony, wiadomość zostaje na
ekranie dopóki skrypt jej nie wyczyści,
• często stosowane gdy skrypt wykonuje jakąś
dłuższą operacje, a my chcemy poinformować
użytkownika o jej przebiegu.
--infobox tekst wysokość szerokość
19. 19
Okno infobox – cd.
#!/bin/bash
dialog --title "Okno infobox"
--backtitle "Kurs programowania w shellu"
--infobox "Tu można poinformować użytkownika o
przebiegu jakiejś operacji, która trwa dłużej,
uspokoić go, że wszystko jest OK." 5 58
Okno textbox
• Wyświetla zawartość pliku tekstowego w oknie
--textbox plik wysokość szerokość
#!/bin/bash
dialog --title "Okno textbox"
--backtitle "Kurs programowania w shellu"
--textbox text 5 40
20. 20
Okno gauge
• Pokaże miarkę na dole okna. Wartości procentowe
czytane są ze standardowego wejścia.
--gauge tekst wysokość szerokość procent
Koniec
Dziękuję za uwagę