Wprowadzenie do programowania w powłoce

Transkrypt

Wprowadzenie do programowania w powłoce
Wprowadzenie do programowania w powłoce
Wprowadzenie do programowania w powłoce
mgr inż. Maciej Lasota
[email protected]
Katedra Informatyki, Politechnika Świętokrzyska w Kielcach
22 lutego 2012
Wprowadzenie do programowania w powłoce
Powłoka systemowa
Powłoka systemowa
Podstawowym sposobem komunikacji z systemem operacyjnym Unix/Linux
(pomijając tryb graficzny) jest powłoka systemowa (ang. system shell) zwana
również interpretatorem poleceń (ang. command interpreter). Powłoka systemowa jest to specjalny program rezydentny (działający w tle w pamięci operacyjnej) uruchamiany przy starcie systemu i stanowiący integralną część systemu
operacyjnego. Zadaniem powłoki systemowej jest umożliwienie komunikacji między użytkownikiem systemu a jądrem systemu operacyjnego (całym systemem
operacyjnym). Powłoka systemowa przyjmuje polecenia od użytkownika i wyprowadza wyniki działania systemu lub określonego programu na ekran monitora
(w postaci komunikatów). W przypadku systemów uniksopodobnych wyróżniam
kilka różnego rodzaju powłok systemowych, w zależności od przeznaczenia.
Powłoki systemowe
sh - podstawowa powłoka systemowa,
bash - ulepszona wersja powłoki sh,
csh,
ksh,
zsh,
tcsh.
Wprowadzenie do programowania w powłoce
Powłoka systemowa
Powłoka systemowa
Powłoka systemowa sh stworzona została przez Stephena Bourne’a przez
rozbudowanie prostego interpretera poleceń o nazwie shell. Sh była domyślną powłoką w systemie Unix Version 7, gdzie zastąpiła pierwszą powłokę dla systemu
Unix napisaną przez Kena Thompsona. Powłoka sh była rozwijana w laboratoriach AT&T, a jej pierwsza wersja pojawiła się w 1977 roku wraz z wydaniem
systemu UNIX Version 7. Plikiem wykonywalnym powłoki na większości systemów Unix jest /bin/sh. Sh jest powłoką rozbudowaną wprowadzającą własny
języki skryptowy (przypominający składnią język C), którego używa się do programowania w powłoce (tworzenia własnych skryptów). Obecnie jest to podstawowa
powłoka systemowa w każdej wersji Unix’a
Wprowadzenie do programowania w powłoce
Powłoka systemowa
Powłoka systemowa
Powłoka systemowa bash to jedna z najpopularniejszych powłok systemów
uniksowych. Jest domyślną powłoką w większości dystrybucji systemu GNU/Linux oraz w systemie Mac OS X, istnieją także wersje dla większości systemów
uniksowych. Bash jest także domyślną powłoką w środowisku Cygwin. Nazwa
jest akronimem od Bourne-Again Shell (odrodzona powłoka shell’a). Wywodzi
się od powłoki sh, która była jedną z pierwszych i najważniejszych powłok systemu operacyjnego Unix oraz zawiera pomysły zawarte w powłokach ksh i csh.
Pierwsza wersja powłoki Bourne’a była tworzona przez Stephena Bourne’a.
Wprowadzenie do programowania w powłoce
Szkielet skryptu powłoki
Szkielet skryptu powłoki
Skrypt powłoki tworzymy w zwykłym standardowym pliku tekstowym
(plain-text) ASCII, skrypt wykonywany (interpretowany linia po linii) jest przez
powłokę systemu operacyjnego. Skrypty powłoki zazwyczaj tworzymy w plikach
z rozszerzeniem *.sh np. script.sh (nieformalna zasada). Podstawowy szkielet
takiego skryptu został przedstawiony poniżej.
Przykład
# Nagłówek (może być #!/bin/sh) określa nam powłokę
# która ma wykonać nasz skrypt
#!/bin/bash
# Cześć deklaracyjna, w części tej mogą znajdować się
# zadeklarowane zmienne,stałe, tablice lub funkcje
echo ”Witaj”
# Komentarze w skrypcie poprzedzamy znakiem „#” hash’a
Wprowadzenie do programowania w powłoce
Szkielet skryptu powłoki
Szkielet skryptu powłoki
Uwaga
Tak stworzony skrypt można wykonać (uruchomić) na dwa sposoby. Pierwszym
sposobem jest wpisanie w linii poleceń (konsoli) nazwę powłoki i nazwę skryptu
(oddzielonych spacją) np. sh script.sh, bash script.sh itd.. Drugim sposobem
jest bezpośrednie wywołanie skryptu wpisując ./script.sh, sposób ten wymaga
jednak ustawienia odpowiednich praw wykonywania dla pliku script.sh.
Wprowadzenie do programowania w powłoce
Prawa dostępu
Prawa dostępu
W systemach Unix/Linux podczas tworzenia pliku, system operacyjny zapisuje nie tylko nazwę i datę utworzenia pliku, ale także identyfikator użytkownika
oraz grupy. Aby chronić pliki przed niepowołanym dostępem dla każdego pliku można ustawić odpowiednie ograniczenia (uprawnienia) zwana też prawami
dostępu.
Wprowadzenie do programowania w powłoce
Prawa dostępu
Prawa dostępu
Prawa dla plików lub katalogów w systemach uniksopodobnych ustawiamy
za pomocą polecenia chmod.
Przykład 1
chmod [prawa dostępu] [nazwa pliku lub katalogu]
chmod [prawa dostępu] -R [nazwa katalogu]
Przykład 2
chmod 755 plik.txt -> (111),(101),(101)
pełne prawa dla właściciela, dla grupy i pozostałych jedynie odczyt i wykonywanie
chmod 666 -R dane -> (110),(110),(110)
dla właściciela, grupy i pozostałych prawo odczytu i zapisu
chmod 700 script.sh -> (111),(000),(000)
dla właściciela pełne prawa
Wprowadzenie do programowania w powłoce
Zmienne
Zmienne
Zmienne w skryptach powłoki deklarujemy w następujący sposób:
nazwa zmiennej=”wartość zmiennej”, jako wartość możemy podać liczbę, napis lub polecenia systemowe, polecenia podajemy w postaci odwrotnych apostrofów ‘polecenie‘ lub $(polecenie). Do zmiennej odwołujemy się poprzez znak
dolara „$”.
Przykład
#!/bin/bash
a=1
b=2
zmienna1=”napis testowy”
zmienna2=‘ls‘
zmienna3=$(pwd)
wynik=$[a+b]
wynik2=$[a+1]
wynik3=$((a+b))
echo $zmienna1
echo ”Moje pliki $zmienna2”
echo ”Moj katlog $zmienna3”
# Komentarze w skrypcie poprzedzamy znakiem „#” hash’a
Wprowadzenie do programowania w powłoce
Operatory arytmetyczne i logiczne
Operatory arytmetyczne i logiczne
Wyróżniamy następujące operatory w języku powłoki:
Operatory arytmetyczne
= - operator przypisania,
+ - operator dodawania,
- - operator odejmowania,
* - operator mnożenia,
/ - operator dzielenia,
** - podnoszenie do potęgi,
% - operator modulo (reszta z dzielenia).
Operatory logiczne
! - operator negacji,
&& - operator iloczynu logicznego,
|| - operator sumy logicznej.
Wprowadzenie do programowania w powłoce
Operatory arytmetyczne i logiczne
Operatory arytmetyczne i logiczne
Pozostałe operatory
+= - operator plus – równa,
-= - operator minus – równa,
*= - operator razy – równa,
/= - operator dzielone – równa,
%= - operator modulo – równa.
Wprowadzenie do programowania w powłoce
Operatory arytmetyczne i logiczne
Operatory arytmetyczne i logiczne
Przykład
if [ ”$string1” = ”$string2” ]
then
command
fi
let ”z=5**3” # 5 * 5 * 5
echo ”z = $z” # z = 125
a=‘expr 5 % 3‘
echo $a # 2
Przykład
if [ $condition1 ] && [ $condition2 ]
if [ $condition1 -a $condition2 ]
if [ $condition1 ] || [ $condition2 ]
if [ $condition1 -o $condition2 ]
let ”var += 5” # Results in var being incremented by 5.
let ”var *= 4” # Rresults in var being multiplied by 4.
Wprowadzenie do programowania w powłoce
Zmienne systemowe i specjalne
Zmienne systemowe i specjalne
Zmienne systemowe, są to zmienne globalne widoczne w systemie. Każdy
system operacyjny posiada własne zmienne systemowe (zmienne środowiskowe)
są one wykorzystywane przez system oraz programy np. zmienna PATH, HOME,
JAVA itp.. Aby wyświetlić w skrypcie powłoki zmienne systemowe należy wywołać
polecenie export lub printenv.
Przykład
#!/bin/bash
global=‘export‘
echo $global
export nowa=”testowa zmienna globalna”
# Komentarze w skrypcie poprzedzamy znakiem „#” hash’a
Wprowadzenie do programowania w powłoce
Zmienne systemowe i specjalne
Zmienne systemowe i specjalne
Zmienne specjalne, są to zmienne często wykorzystywane w skryptach
powłoki (zazwyczaj są tylko do odczytu).
Zmienne specjalne
$0 - zmienna zawiera nazwę skryptu (pliku),
$1..$9 - parametry zewnętrzne przekazywane do skryptu (od 1 do 9),
$@ - zmienna zawiera wszystkie parametry przekazywane do skryptu,
@? - zmienna przechowuje kod powrotu ostatnio wywołanego polecenia (0
oznacza poprawne wykonanie polecenia),
$$ - PID procesu bieżącej powłoki.
Wprowadzenie do programowania w powłoce
Instrukcje warunkowe
Instrukcje warunkowe
Instrukcja warunkowa IF (wersja 1)
if warunek then
polecenie
fi
Instrukcja warunkowa IF (wersja 2)
if warunek then
polecenie 1
else polecenie 2
else polecenie 3
fi
Przykład
#!/bin/bash
if [ -e /test.plik] then
echo „Plik test.plik jest w katalogu glownym”
fi # Komentarze w skrypcie poprzedzamy znakiem „#” hash’a
Wprowadzenie do programowania w powłoce
Instrukcje warunkowe
Instrukcje warunkowe
Testowanie warunku możemy wykonać jawnie za pomocą polecenia test
lub też wykorzystaniem nawiasów kwadratowych.
Przykład
test wyrazenie1 operator wyrazenie2 lub [ wyrazenie1 operator wyrazenie2 ]
Wprowadzenie do programowania w powłoce
Instrukcje warunkowe
Instrukcje warunkowe
Rodzaje operatorów wykorzystywane do testowania warunku
-a plik istnieje,
-b plik istnieje i jest blokowym plikiem specjalnym,
-c plik istnieje i jest plikiem znakowym,
-e plik istnieje,
-h plik istnieje i jest linkiem symbolicznym,
= sprawdza czy wyrażenia są równe,
!= sprawdza czy wyrażenia są różne,
-n wyrażenie ma długość większą niż 0,
-d wyrażenie istnieje i jest katalogiem,
-z wyrażenie ma zerową długość.
Wprowadzenie do programowania w powłoce
Instrukcje warunkowe
Instrukcje warunkowe
Rodzaje operatorów wykorzystywane do testowania warunku
-r można czytać plik,
-w można zapisywać do pliku,
-x można plik wykonać,
-f plik istnieje i jest plikiem zwykłym,
-p plik jest łączem nazwanym,
-N plik istnieje i był zmieniany od czasu jego ostatniego odczytu,
plik1 -nt plik2 plik1 jest nowszy od pliku2,
plik1 -ot plik2 plik1 jest starszy od pliku2,
-lt mniejsze niż,
-gt większe niż,
-ge większe lub równe,
-le mniejsze lub równe.
Wprowadzenie do programowania w powłoce
Instrukcje warunkowe
Instrukcje warunkowe
Instrukcja warunkowa CASE
case $zmienna in
”wzorzec1”) polecenie1 (break/continue/exit);;
”wzorzec2”) polecenie2 (break/continue/exit);;
*) polecenie (break/conitnue/exit);;
...
esac
Przykład
#!/bin/bash
case $para in
”1”) echo ”Wybor 1” ; break ;;
”2”) echo ”Wybor 2” ; break ;;
”q”) echo ”Wyjscie” ; exit ;;
*) continue ;;
esac
Wprowadzenie do programowania w powłoce
Instrukcje pętli
Instrukcje pętli
Instrukcja warunkowa WHILE (wersja 1)
while warunek do polecenie ... done
Instrukcja warunkowa WHILE (wersja 2)
while [1] polecenie done
Przykład
#!/bin/bash
i=1
while [$i -le 100] do
echo ”Tekst wyswietlony $i raz’y”
i=$[i+1]
if [i -le 20] then
break
fi
done
Wprowadzenie do programowania w powłoce
Instrukcje pętli
Instrukcje pętli
Uwaga
W pętli może występować instrukcja continue służąca do ponownego wykonania
pętli lub instrukcja break, służąca do natychmiastowego przerwania wykonywania
instrukcji pętli.
Wprowadzenie do programowania w powłoce
Instrukcje pętli
Instrukcje pętli
Instrukcja warunkowa FOR (wersja 1)
for((zmienna; warunek; inkrementacja)) do
polecenie
...
done
Instrukcja warunkowa FOR (wersja 2)
for zmienna in arg1 arg2 arg3 ...
do
polecenie
done
Przykład
#!/bin/bash
for((i=0; i¡=5; i++ ))
echo ”Tekst wyswietlony $i raz’y”
done
for a in 1 2 3 4 5
echo ”Tekst wyswietlony $a raz’y”
done
Wprowadzenie do programowania w powłoce
Instrukcje pętli
Instrukcje pętli
Instrukcja warunkowa UNTIL
until warunek do
polecenie
...
done
Przykład
#!/bin/bash
i=10
until [$i -ge 5] do
echo ”liczba i: $i”
i=$[i-1]
done
Wprowadzenie do programowania w powłoce
Instrukcje pętli
Instrukcje pętli
Instrukcja warunkowa SELECT
select zmienna in lista do
polecenie
...
done
Przykład
#!/bin/bash
select y in X Y Z do
case $y in
”X”) echo ”Wybrałeś X” ;;
”Y”) echo ”Wybrałeś Y” ;;
”Z”) echo ”Wybrałeś Z” ;;
*) echo ”Nic nie wybrałeś”
esac
break
done
Wprowadzenie do programowania w powłoce
Wyświetlanie danych
Wyświetlanie danych
W celu wyświetlanie danych na ekranie monitora (standardowe wyjście)
wykorzystuje się polecenie echo.
Przykład
echo -n ”Tekst do wyświetlenia”
echo -e ”\t\t Tekst do wyświetlenia i dodatkowo zmienna $a \n\n”
Wprowadzenie do programowania w powłoce
Wyświetlanie danych
Wyświetlanie danych
Rodzaje parametrów
-n nie wysyła znaku końca linii (brak przejścia do nowej linii),
-e włącza interpretację parametrów wewnątrz tekstu.
Rodzaje parametrów wewnątrz tekstu
\n - przejście do nowej linii,
\a – alert (dzwonek)
\b - backspace,
\a – alert (dzwonek)
\c - pomija znak końca nowej linii,
\f - escape,
\r - znak nowej linii,
\t – tabulacja,
\\ - backslash.
Wprowadzenie do programowania w powłoce
Wczytywanie danych
Wczytywanie danych
W celu wczytania danych do zmiennej wykorzystuje się polecenie read.
Przykład
read [operator][zmienna]
read a b
echo ”$a”
echo ”$b”
read -e
echo ”$REPLY”
Rodzaje parametrów
-a pokaż znak zachęty bez kończącego znaku nowej linii„
-p wczytywanie danych do tablicy,
-e jeśli nie podano żadnej zmiennej dane trafią do zmiennej systemowej
$REPLY.
Wprowadzenie do programowania w powłoce
Tablice
Tablice
Deklaracja tablicy
zmienna=(wartość1 wartość2 wartość3 ...)
Przykład
#!/bin/bash
tablica=(Poniedzialek Wtorek Sroda Czwartek piątek Sobota Niedziela)
echo ${tablica[0]}
echo ${tablica[1]}
echo ${tablica[2]}
echo ${tablica[4]}
echo ${tablica[5]}
echo ${tablica[6]}
echo ${tablica[*]}
echo ${#tablica[0]}
echo ${#tablica[@]}
Wprowadzenie do programowania w powłoce
Tablice
Tablice
Uwaga
echo ${tablica[*]} - wyświetlanie wszystkich elementów tablicy,
echo ${#tablica[0]} – wyświetlanie długości znaków podanego elementu
np. 12 dla tablica[0],
echo ${#tablica[@]} - wyświetlanie liczby wszystkich elementów w tablicy
np. 7 dla tablicy.
Wprowadzenie do programowania w powłoce
Tablice
Tablice
Przykład
#!/bin/bash
tablica=(Poniedzialek Wtorek Sroda Czwartek piątek Sobota Niedziela)
unset tablica[6]
echo ${tablica[*]}
tablica[6]=tekst
tablica[7]=tekst2
echo ${tablica[*]}
unset tablica[*]
echo ${tablica[@]}
Wprowadzenie do programowania w powłoce
Funkcje
Funkcje
Deklaracja funkcji
function nazwa funkcji()
{
polecenie
...
return $zmienna
}
Przykład 1
#!/bin/bash
function test()
{
echo ”test”
}
test
Przykład 2
#!/bin/bash
function dodaj()
{
wynik=‘expr $1 + $2‘
return $wynik
}
dodaj 20 30
Wprowadzenie do programowania w powłoce
Przekierowania i strumienie
Przekierowania i strumienie
Operatory przekierowania i strumieni
> - operator przekierowania do,
< - operator przekierowania z,
>> - operator dopisania do,
<< - operator dopisania z,
| - operator strumienia.
Przykład 1
pwd > plik.txt
# zapisanie ścieżki do pliku
more < plik.txt
# wyświetlenie pliku na ekranie
cat plik1.txt > plik2.txt
# zpisanie pliku1.txt do pliku2.txt
ls *.txt >> plik3.txt
# dopisanie do pliku3.txt

Podobne dokumenty