bash 2 ----- wykład3i4
TRANSCRIPT
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
Polecenia testujące i wyrażenia testowe
• Sprawdzają wartość wyrażenia testowego wyrażenie ijeśli jest prawdziwe, zwracają wartość 0, w przeciwnymwypadku 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ńcuchowiinformatyka
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
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
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
thenpolecenia_do_wykonania
fi
polecenia_do_wykonania zostaną wykonane, gdy polecenie_testujące zwróci wartość 0
(czyli gdy jest prawdziwe)
if polecenie_testujące
thenpolecenia_do_wykonania1
elsepolecenia_do_wykonania2
fi
5
Elif = else if
if polecenie_testujące1
thenpolecenia_do_wykonania1
elseif polecenie_testujące2
then
polecenia_do_wykonania2
fifi if polecenie_testujące1
thenpolecenia_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ść inwzorzec1 )
ciąg_poleceń1
;;wzorzec2 )
ciąg_poleceń2
;;…wzorzecN )
ciąg_poleceńN
;;* )
ciąg_poleceń
;;esac
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/bashfor A in ‘cat p1’do
echo „Kopiowanie pliku $A”cp $A ../kat1
done
for zmienna [in lista_słów]do
lista_poleceń
done
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/bashfor ( ( A=1; A<=5; A++) )do
echo „$A”done
for ( ( wyr1; wyr2; wyr3 ) )do
lista_poleceń
done
8
Pętla while
Polecenia objęte zakresem pętli while są wykonywane takdługo jak długo polecenie_testujące zwraca wartość 0(wyrażenie jest prawdziwe)
while polecenie_testujące
dolista_poleceń
done
Pętla while - przykład
Skrypt wyświetlający kolejne parametry swojego wywołania.
while polecenie_testujące
dolista_poleceń
done
#!/bin/bashwhile [ $1 ]do
echo „$1”shift
done
9
Pętla until
Polecenia objęte zakresem pętli until są wykonywane takdługo aż polecenie_testujące zwróci wartość 0 (testowanewyrażenie przyjmie wartość prawdy)
until polecenie_testujące
dolista_poleceń
done
Pętla until - przykład
Skrypt wypisujący kolejno a, aa, aaa, aaaa.
#!/bin/bashzmienna=„”Until [ „$zmienna” == aaaa ]do
zmienna=${zmienna}aecho $zmienna
done
until polecenie_testujące
dolista_poleceń
done
10
Polecenia break i continue
Polecenia do kontrolowania wykonania pętli. Break
przerywa działanie pętli. Continue powoduje pominięciepozostałych instrukcji z pętli i przejście do kolejnej iteracji.
Break, continue - przykład
1. Skrypt wypisujący wartości parametrów pozycyjnych domomentu napotkania parametru, którego wartość jestcyfrą.
2. Skrypt wypisujący tylko te wartości parametrówpozycyjnych, które nie są cyframi.
Polecenie break
#!/bin/bashfor Ido
case $I in[0-9] )
break #przerwanie gdy wartością zmiennej jest cyfra;;* )
echo $I;;
esacecho „To nie była cyfra”
done
11
Polecenie continue
#!/bin/bashfor Ido
case $I in[0-9] )
continue #przejście do kolejnej iteracji, gdy wartością zmiennej jest cyfra
;;* )
echo $I;;
esacecho „To nie była cyfra”
done
Polecenie grep
Instrukcja realizuje wyszukiwanie w tekście linii pasujących dookreślonego wzorca.
grep [opcje] wzorzec [plik]
Jeśli plik nie zostanie wskazany, dane są pobierane zestandardowego 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
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
Okna dialogowe – opcje
• --clear - czyści ekran,
• --createrc plik - można użyć tej opcji dowygenerowania przykładowego plikukonfiguracyjnego,
• --separate-output - tę opcję stosuje się przywidgetach checklist, drukuje wyjście w osobnychliniach, co umożliwia przetwarzanie uzyskanychdanych 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 musiodpowiedzieć tak lub nie.
--yesno tekst wysokość szerokość
#!/bin/bash
dialog --title "Okno yesno" \
--yesno "Wybierz tak lub nie." 5 30
14
Okno menu
• służy do prezentowania listy wyborów w postacimenu,
• użytkownik może wybrać tylko jedną pozycję,
• wyświetlanych jest tyle wpisów ile jest podanychjako wysokość_menu. Jeśli, jest ich więcej listabę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
Okno checklist
• Podobne do menu, z tą różnicą, iż możnazaznaczać lub odznaczać wiele wpisówjednocześnie.
• Niektóre wpisy mogą być domyślnie włączane zapomocą ustawienia status na on.
• Okno checklist posiada przyciski ok i cancel.
• Na stderr drukowana jest lista elementów, którezostał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
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óryelement menu zostanie wybrany.
--radiolist tekst wysokość szerokość
wysokość_listy
17
Okno radiolist – cd.
#!/bin/bash
dialog --clear \
--title "Okno radiolist" \
--backtitle "Kurs programowania w shellu" \
--radiolist "Można zaznaczyć tylko jeden wpis:" 1070 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" 840 "Tu wpisz dane"
18
Okno msgbox
• służy do wyświetlania komunikatów (np. informacjao 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, naprzykład informacje o tym co skrypt robi, pomoc,itp." 7 45
Okno infobox
• podobne do msgbox, jednak nie ma żadnegoprzycisku,
• dialog skończy działanie po wyświetleniu danejinformacji,
• ekran nie jest czyszczony, wiadomość zostaje naekranie 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
Okno infobox – cd.
#!/bin/bash
dialog --title "Okno infobox" \
--backtitle "Kurs programowania w shellu" \
--infobox "Tu można poinformować użytkownika oprzebiegu 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
Okno gauge
• Pokaże miarkę na dole okna. Wartości procentoweczytane są ze standardowego wejścia.
--gauge tekst wysokość szerokość procent
Koniec
Dziękuję za uwagę