SlideShare a Scribd company logo
1 of 23
Download to read offline
1
PODSTAWY INFORMATYKI
dr inż. Krzysztof Małecki
Bash – literatura
Wykład został opracowany na podstawie materiałów:
http://www.ournet.pl/kursbasha/main.html
2
Bash
• BASH (ang. Bourne Again SHell) to stworzony przez
Briana Foxa i Cheta Rameya zgodny z sh interpreter
poleceń, łączący w sobie zalety shella Korna (ksh) i C-
shella (csh).
• BASH to najbardziej popularna powłoka używana na
systemach unixowych, jest też skryptowym językiem
programowania, umożliwiającym efektywne zarządzanie
systemem.
• Skrypt – to niekompilowany tekstowy plik wykonywalny,
zawierający pewne polecenia systemowe oraz polecenia
sterujące jego wykonaniem (instrukcje, pętle itp.).
Wykonywany jest tylko i wyłącznie przez interpreter
(np. /bin/bash), który tłumaczy polecenia zawarte w
skrypcie na język zrozumiały dla procesora.
Przykładowe polecenia
• ls (np. ls –l)
– prawa dostępu ([d-katalog, l-dowiązanie], właściciel, grupa, do
której należy właściciel, pozostali): drwxrwxrwx
• man
• apropos
• mkdir
• touch – zakładanie pliku (pico, vim, vi, mcedit,….)
• cp
• mv
• rm
– (np. rm –r nazwa_katalogu - kasowanie katalogu, niepustego)
• cat – wyświetlenie zawartości zbioru
3
Echo
• Polecenie echo – służy do wydrukowania
na standardowym wyjściu (stdout -
domyślnie jest to ekran) napisu podanego
jako argument polecenia.
echo "jakiś napis”
• Można też pisać do pliku.
echo "jakiś napis" > plik
echo "jakiś napis" >> plik
Kasowanie
zawartości
Dopisywanie
na końcu
Echo – parametry polecenia
• -n nie jest wysyłany znak nowej linii
• -e włącza interpretacje znaków specjalnych:
– a alert, dzwonek
– b backspace
– c pomija znak kończący nowej linii
– f escape
– n form feed czyli wysuw strony
– r znak nowej linii
– t tabulacja pozioma
– v tabulacja pionowa
–  backslash
– nnn znak, którego kod ASCII ma wartość ósemkowo
– xnnn znak, którego kod ASCII ma wartość szesnastkowo
4
Echo
• $ echo Angielskie I’m
• $ echo ‘Angielskie I’’’m’
• W tym przypadku zapis ‘’’ (apostrof, backslash, apostrof,
apostrof) zadziała tak jakby apostrof znajdował się w
ciągu znaków objętych apostrofami. Pierwszy znak ‘ w
ciągu ‘’’ kończy pierwszy ciąg objęty apostrofami
(‘Angielskie I’), ’ dodaje znak apostrofu, a następny
apostrof rozpoczyna kolejny ciąg znaków objęty
apostrofami, zawierający literę ‘m’.
Pierwszy skrypt!!
touch skrypt1
#!/bin/bash #Tu jest komentarz.
echo "Witaj"
• Znak # oznacza komentarz, interpreter pomija wszystko
co znajduje się za nim w tej samej linii.
• #! ma szczególne znaczenie - wskazuje na rodzaj shella
w jakim skrypt ma być wykonany.
• Ale to nie wszystko…
5
Pierwszy skrypt!!
• Aby móc uruchomić skrypt należy mu jeszcze nadać
atrybut wykonywalności za pomocą polecenia:
chmod +x skrypt1
• Jeśli katalog bieżący w którym znajduje się skrypt nie
jest dopisany do zmiennej PATH, to nasz skrypt
możemy uruchomić następująco:
./skrypt1
chmod
• chmod
– chmod u+x, chmod u-x,
– chmod +x, chmod -x,
– chmod 777,
– itd.
• UWAGA: chmod 000 .
Czy są inne
możliwości?
6
read
• Polecenie read – czyta ze standardowego wejścia
pojedynczy wiersz.
read -opcje nazwa_zmiennej
Przykład:
#!/bin/bash
echo -n "Podaj swoje imię: "
read imie
echo "$imie"
• zmienna nie musi być wcześniej tworzona, jeśli istniała
wcześniej, to jej zawartość zostanie zastąpiona tym co
wpisaliśmy.
Wprowadzenie
danych do zmiennej
imie
read – cd.
Przykład:
#!/bin/bash
echo „Wpisz coś:”
answer=„napis”
read
echo „$answer”
Sposób zapisu!!!
7
read – cd.
• Polecenie read pozwala na przypisanie kilku wartości
kilku zmiennym.
Przykład:
• #!/bin/bash
• echo „Wpisz cztery wartości:”
• read a b c
• echo „Wartość zmiennej a to: $a”
• echo „Wartość zmiennej b to: $b”
• echo „Wartość zmiennej c to: $c”
Np. 5 7 8 3
A co tutaj będzie?
read – wybrane opcje
-p Pokaże znak zachęty bez kończącego znaku nowej
linii.
#!/bin/bash
read -p "Podaj swoje imię :" odp
echo "$odp"
-a Kolejne wartości przypisywane są do kolejnych
indeksów zmiennej tablicowej.
#!/bin/bash
echo „Podaj elementy zmiennej tablicowej:”
read –a tablica
echo "${tablica[*]}”
8
Cytowanie
Znaki cytowania służą do usuwania interpretacji
znaków specjalnych przez powłokę.
• cudzysłów (ang. double quote): " "
– do umieszczania tekstu, wartości zmiennych
zawierających spacje. Cudzysłowy zachowują
znaczenie specjalne trzech znaków:
– $ wskazuje na nazwę zmiennej, umożliwiając
podstawienie jej wartości,
–  znak maskujący,
– ` ` odwrotny apostrof, umożliwia zacytowanie
polecenia.
Cytowanie – przykład
#!/bin/bash
x=2
echo "Wartość zmiennej x to $x"
#wydrukuje Wartość zmiennej x to 2
echo -ne "Usłyszysz dzwoneka„
echo "Polecenie date pokaże: `date`"
9
Cytowanie – cd.
• apostrof (ang. single quote): ' '
– Wszystko co ujęte w znaki apostrofu
traktowane jest jak łańcuch tekstowy, apostrof
wyłącza interpretowanie wszystkich znaków
specjalnych, znaki traktowane są jak zwykłe
znaki.
• Przykład:
#!/bin/bash
echo '$USER' #nie wypisze loginu!!!
Cytowanie – cd.
• odwrotny apostrof (ang. backquote): ` `
– umożliwia zacytowanie polecenia, bardzo przydatne jeśli chce
się podstawić pod zmienną wynik jakiegoś polecenia np:
• Przykład:
#!/bin/bash
x=`ls -la $PWD`
echo $x #pokaże rezultat polecenia
Alternatywny zapis, który ma takie samo działanie:
#!/bin/bash
echo $(ls -la $PWD)
10
Cytowanie – cd.
• backslash, czyli znak maskujący: 
• Przykład:
– na ekranie ma pojawić się napis $HOME
echo "$HOME" #wydrukuje /home/ja
– aby wyłączyć interpretacje przez powłokę tej zmiennej, trzeba
napisać:
echo $HOME
i jest napis
$HOME
☺
Funkcje
• Coś w rodzaju podprogramów. Stosuje się, gdy w
skrypcie powtarza się jakaś grupa poleceń.
• Do danej funkcji odwołujemy się podając jej nazwę, a
wykonane zostanie wszystko, co wpisaliśmy między
nawiasy { }.
• Funkcje skracają znacznie długość skryptu.
• Składnia:
function nazwa_funkcji
{
polecenie1
polecenie2
…
}
11
Funkcje – przykład
#!/bin/bash
function napis
{
echo "To jest napis"
}
napis wywołanie
naszej
funkcji
Funkcje – cd.
• Funkcje mogą się znajdować w innym pliku, co uczyni
nasz skrypt bardziej przejrzystym i wygodnym, tworzy
się własne pliki nagłówkowe, wywołuje się je tak:
. ~/nasz_plik_z_funkcjami
nazwa_funkcji
Trzeba pamiętać o
podaniu kropki i
spacji przed nazwą
pliku !!!!
12
Funkcje – przykład
#!/bin/bash
function nasza_funkcja
{
echo -e 'Właśnie użyłeś funkcji o nazwie
"nasza_funkcja".a'
}
• Teraz pozostało jeszcze utworzyć skrypt, w którym
wywołamy funkcję: nasza_funkcja:
#!/bin/bash
echo "Test funkcji."
. funkcja
nasza_funkcja
Zmienne programowe
(ang. program variables
• Zmienne definiowane samodzielnie przez użytkownika.
nazwa_zmiennej="wartość"
Na przykład:
x="napis"
echo $x
x = "napis" Błędny zapis !!!
13
Zmienne programowe – cd.
Pod zmienną możemy podstawić wynik jakiegoś polecenia
(dwa sposoby):
1. Poprzez użycie odwrotnych apostrofów:
`polecenie`
• Przykład:
#!/bin/bash
GDZIE_JESTEM=`pwd` #Wartością zmiennej
GDZIE_JESTEM jest wynik działania polecenia pwd, które
wypisze nazwę katalogu w jakim się w danej chwili znajdujemy.
echo "Jestem w katalogu $GDZIE_JESTEM"
Zmienne programowe – cd.
2. Za pomocą rozwijania zawartości nawiasów:
$(polecenie)
• Przykład:
#!/bin/bash
GDZIE_JESTEM=$(pwd)
echo "Jestem w katalogu $GDZIE_JESTEM"
14
Zmienne specjalne
(ang. special variables, special parameters)
To najbardziej prywatne zmienne powłoki, są udostępniane
użytkownikowi tylko do odczytu.
• $0
– nazwa bieżącego skryptu lub powłoki
#!/bin/bash
echo "$0" #Pokaże nazwę naszego skryptu.
• $1..$9
– Parametry przekazywane do skryptu (użytkownik może
modyfikować ten rodzaj $-ych specjalnych).
#!/bin/bash
echo "$1 $2 $3"
Zadziała w przypadku
uruchomienia skryptu
z parametrami!!!
Zmienne specjalne – cd.
• $@
– Pokaże wszystkie parametry przekazywane do skryptu (też
wyjątek), równoważne $1 $2 $3..., jeśli nie podane są żadne
parametry $@ interpretowana jest jako nic ☺.
• Przykład:
#!/bin/bash
echo "Skrypt uruchomiono z parametrami: $@"
./plik parametr1 parametr2
• Wynik działania:
Skrypt uruchomiono z parametrami: parametr1 parametr2
15
Zmienne specjalne – cd.
• $?
– kod powrotu ostatnio wykonywanego polecenia
• $$
– PID procesu bieżącej powłoki
Zmienne środowiskowe
(ang.environment variables)
Definiują środowisko użytkownika, dostępne dla wszystkich
procesów potomnych. Wyróżniamy:
– globalne - widoczne w każdym podshellu
– lokalne - widoczne tylko dla tego shella, w którym zostały
ustawione
• Przykład:
x="napis" #definicja zmiennej
echo $x
xterm #wywołanie podshella
• ponowne wywołanie:
echo $x
nie pokaże nic, bo zmienne lokalne nie są widoczne w
podshellach!!!
16
Zmienne środowiskowe – cd.
• Inicjacja zmiennej globalnej:
export x="napis"
– Teraz zmienna x będzie widoczna w podshellach. Polecenie
export nadaje wskazanym zmiennym atrybut zmiennych
globalnych.
– Polecenie export -p pozwala uzyskać listę aktualnie
eksportowanych zmiennych.
• usunięcie atrybutu eksportu dla danej zmiennej
export -n zmienna
Przykłady zmiennych środowiskowych
$HOME #ścieżka do katalogu domowego
$USER #twój login
$HOSTNAME #nazwa twojego hosta
$OSTYPE #rodzaj systemu operacyjnego
• dostępne zmienne środowiskowe można wyświetlić za
pomocą polecenia:
printenv | more
17
Zmienne tablicowe
• BASH pozwala na stosowanie zmiennych tablicowych
jednowymiarowych.
• Tablica? Zmienna, która przechowuje listę pewnych
wartości (rozdzielonych spacjami).
• w BASH'u nie ma maksymalnego rozmiaru tablic.
• Kolejne wartości zmiennej tablicowej indeksowane są
przy pomocy liczb całkowitych, zaczynając od 0.
• Składnia
zmienna=(wartość1 wartość2 wartość3 wartośćn)
Zmienne tablicowe – przykład
#!/bin/bash
tablica=(element1 element2 element3)
echo ${tablica[0]}
echo ${tablica[1]}
echo ${tablica[2]}
• Do elementów tablicy odwołujemy się za pomocą
wskaźników.
${nazwa_zmiennej[wskaźnik]}
• Wskaźnikami są indeksy elementów tablicy: 0…n, @, *.
echo ${tablica[*]} #to samo co powyżej
18
Zmienne tablicowe – cd.
Można też uzyskać długość (liczba znaków) danego
elementu tablicy:
${#nazwa_zmiennej[wskaźnik]}
• Przykład:
#!/bin/bash
tablica=(element1 element2 element3)
echo ${#tablica[0]} #liczba znaków pierwszego
elementu tablicy, czyli 8.
echo ${#tablica[@]} #liczba wszystkich
elementów tablicy, czyli 3.
Dodawanie elementów do tablicy
nazwa_zmiennej[wskaźnik]=wartość
#!/bin/bash
tablica=(element1 element2 element3)
tablica[3]=element4
echo ${tablica[@]}
• BASH automatycznie utworzy tablicę, w przypadku
dodania elementu do zmiennej nieistniejącej:
#!/bin/bash
linux[0]=slackware
linux[1]=debian
echo ${linux[@]}
Tablica linux
z dwoma
elementami.
19
Usuwanie elementów tablic
• Polecenie unset.
unset nazwa_zmiennej[wskaźnik]
#!/bin/bash
tablica=(element1 element2 element3)
echo ${tablica[@]}
unset tablica[2]
echo ${tablica[*]}
Usunięty ostatni
element tablicy.
Usuwanie całych tablic
• Aby usunąć całą tablicę wystarczy podać jako wskaźnik:
@ lub *.
#!/bin/bash
tablica=(element1 element2 element3)
unset tablica[*]
echo ${tablica[@]}
Ciekawe, co
zostanie
wyświetlone?
20
Wyrażenia arytmetyczne
• mechanizm interpretacji wyrażeń arytmetycznych,
• obliczenia dokonywane są na liczbach całkowitych,
• nie przeprowadzana jest kontrola przepełnienia (ang.
overflow).
$((wyrażenie)) lub $[wyrażenie]
• Przykład:
#!/bin/bash
echo $((8/2))
wynik=$[4*5/2]
echo "$wynik"
Wyrażenia arytmetyczne – cd.
• Polecenie let
• Przykład:
#!/bin/bash
liczba1=5
liczba2=6
let wynik=liczba1*liczba2
echo "$wynik"
21
Strumienie danych
• stdin (ang. standard input), standardowe wejście, skąd
proces pobiera dane, domyślnie jest to klawiatura
• stdout (ang. standard output) to standardowe wyjście,
wysyłany jest tam wynik działania procesu, domyślnie
ekran
• stderr (ang. standard error), standardowe wyjście
błędów, tam trafiają wszystkie komunikaty o błędach,
domyślnie ekran
Deskryptory plików
• Linux wszystko traktuje jako plik, niezależnie od tego czy
to jest plik zwykły, katalog, urządzenie blokowe
(klawiatura, ekran) itd.
• Tak samo jest ze strumieniami, BASH identyfikuje je za
pomocą przyporządkowanych im liczb całkowitych
(0…2), tzw. deskryptorów plików:
– 0 to plik, z którego proces pobiera dane: stdin,
– 1 to plik, do którego proces pisze wyniki swojego działania
stdout,
– 2 to plik, do którego trafiają komunikaty o błędach stderr.
• Za pomocą operatorów przypisania można
manipulować strumieniami, poprzez przypisanie
deskryptorów: 0, 1, 2 innym plikom, niż tym
reprezentującym klawiaturę i ekran.
22
Przełączanie standardowego wejścia
• Zamiast klawiatury jako standardowe wejście można
otworzyć plik:
< plik
• Przykład:
sort < lista
• Wynik na ekranie:
caldera
debian
redhat
slackware
Plik lista:
slackaware
redhat
debian
caldera
Przełączanie standardowego wyjścia
• Wynik jakiegoś polecenia można wysłać do pliku (z
nadpisaniem lub z dopisaniem), a nie na ekran:
> plik lub >> plik
• Przykład:
ls -la /usr/bin > ~/wynik
• jeśli plik wynik wcześniej nie istniał, to zostanie
utworzony, jeśli istniał cała jego poprzednia zawartość
zostanie nadpisana.
ls -la /usr/bin >> ~/wynik
• jeśli plik wynik istniał to zawartość zostanie uzupełniona.
23
Przełączanie standardowego wyjścia błędów
• Do pliku można też kierować strumień diagnostyczny:
2> plik
• Przykład:
#!/bin/bash
echo "Stderr jest skierowane do pliku error"
ls -y 2> ~/error #błąd
ls -y 2>> ~/error #błąd
Polecenie ls jest użyte
z błędną opcją -y,
komunikat o błędzie
trafi do pliku error.
Koniec
Dziękuję za uwagę

More Related Content

Viewers also liked

Power goals presentation empowering women
Power goals presentation   empowering womenPower goals presentation   empowering women
Power goals presentation empowering womenKenn Renner
 
Ukraine Mykhailo Chaplyha
Ukraine Mykhailo ChaplyhaUkraine Mykhailo Chaplyha
Ukraine Mykhailo ChaplyhaMaksym Klyuchar
 
Vaughan Community Report
Vaughan Community ReportVaughan Community Report
Vaughan Community ReportFranco AQUINO
 
So you want to rent a dumspter
So you want to rent a dumspterSo you want to rent a dumspter
So you want to rent a dumsptersuperantix
 
Social media Project By Somnath.
Social media Project By Somnath.Social media Project By Somnath.
Social media Project By Somnath.Amitava Majumder
 
Mapas conceptuales de sitemas distribuidos, modelo OSI y modelo TCP
Mapas conceptuales de sitemas distribuidos, modelo OSI  y modelo TCPMapas conceptuales de sitemas distribuidos, modelo OSI  y modelo TCP
Mapas conceptuales de sitemas distribuidos, modelo OSI y modelo TCPSergio Rodriguez
 
Polymer - El fin a tus problemas con el FrontEnd
Polymer - El fin a tus problemas con el FrontEndPolymer - El fin a tus problemas con el FrontEnd
Polymer - El fin a tus problemas con el FrontEndIsrael Blancas
 
Guerra Colonial
Guerra ColonialGuerra Colonial
Guerra Colonialguesta8ae2
 
Melô dos advérbios (Meiga e abusada) – Anitta – Paródias Pedagógicas – ProAlex
Melô dos advérbios (Meiga e abusada) – Anitta – Paródias Pedagógicas – ProAlexMelô dos advérbios (Meiga e abusada) – Anitta – Paródias Pedagógicas – ProAlex
Melô dos advérbios (Meiga e abusada) – Anitta – Paródias Pedagógicas – ProAlexAlex Santos
 
Interjeições não é assunto bobo (Meu violão e o nosso cachorro) – Paródias Pe...
Interjeições não é assunto bobo (Meu violão e o nosso cachorro) – Paródias Pe...Interjeições não é assunto bobo (Meu violão e o nosso cachorro) – Paródias Pe...
Interjeições não é assunto bobo (Meu violão e o nosso cachorro) – Paródias Pe...Alex Santos
 
Leitura compartilhada - Lenda - A Fonte da Juventude - Prof. Alex
Leitura compartilhada - Lenda - A Fonte da Juventude - Prof. AlexLeitura compartilhada - Lenda - A Fonte da Juventude - Prof. Alex
Leitura compartilhada - Lenda - A Fonte da Juventude - Prof. AlexAlex Santos
 
Agile vs. waterfall
Agile vs. waterfallAgile vs. waterfall
Agile vs. waterfallDvir Zohar
 
Manuel Alegre
Manuel AlegreManuel Alegre
Manuel Alegrebart3881
 

Viewers also liked (16)

c.v 2015
c.v 2015c.v 2015
c.v 2015
 
Power goals presentation empowering women
Power goals presentation   empowering womenPower goals presentation   empowering women
Power goals presentation empowering women
 
Ukraine Mykhailo Chaplyha
Ukraine Mykhailo ChaplyhaUkraine Mykhailo Chaplyha
Ukraine Mykhailo Chaplyha
 
Interviewing Skills
Interviewing SkillsInterviewing Skills
Interviewing Skills
 
Vaughan Community Report
Vaughan Community ReportVaughan Community Report
Vaughan Community Report
 
So you want to rent a dumspter
So you want to rent a dumspterSo you want to rent a dumspter
So you want to rent a dumspter
 
Social media Project By Somnath.
Social media Project By Somnath.Social media Project By Somnath.
Social media Project By Somnath.
 
Understanding linport
Understanding linportUnderstanding linport
Understanding linport
 
Mapas conceptuales de sitemas distribuidos, modelo OSI y modelo TCP
Mapas conceptuales de sitemas distribuidos, modelo OSI  y modelo TCPMapas conceptuales de sitemas distribuidos, modelo OSI  y modelo TCP
Mapas conceptuales de sitemas distribuidos, modelo OSI y modelo TCP
 
Polymer - El fin a tus problemas con el FrontEnd
Polymer - El fin a tus problemas con el FrontEndPolymer - El fin a tus problemas con el FrontEnd
Polymer - El fin a tus problemas con el FrontEnd
 
Guerra Colonial
Guerra ColonialGuerra Colonial
Guerra Colonial
 
Melô dos advérbios (Meiga e abusada) – Anitta – Paródias Pedagógicas – ProAlex
Melô dos advérbios (Meiga e abusada) – Anitta – Paródias Pedagógicas – ProAlexMelô dos advérbios (Meiga e abusada) – Anitta – Paródias Pedagógicas – ProAlex
Melô dos advérbios (Meiga e abusada) – Anitta – Paródias Pedagógicas – ProAlex
 
Interjeições não é assunto bobo (Meu violão e o nosso cachorro) – Paródias Pe...
Interjeições não é assunto bobo (Meu violão e o nosso cachorro) – Paródias Pe...Interjeições não é assunto bobo (Meu violão e o nosso cachorro) – Paródias Pe...
Interjeições não é assunto bobo (Meu violão e o nosso cachorro) – Paródias Pe...
 
Leitura compartilhada - Lenda - A Fonte da Juventude - Prof. Alex
Leitura compartilhada - Lenda - A Fonte da Juventude - Prof. AlexLeitura compartilhada - Lenda - A Fonte da Juventude - Prof. Alex
Leitura compartilhada - Lenda - A Fonte da Juventude - Prof. Alex
 
Agile vs. waterfall
Agile vs. waterfallAgile vs. waterfall
Agile vs. waterfall
 
Manuel Alegre
Manuel AlegreManuel Alegre
Manuel Alegre
 

Similar to Bash 1 ----- wykład2i3

ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogoKamil Monticolo
 
Bash 2 ----- wykład3i4
Bash 2   -----      wykład3i4Bash 2   -----      wykład3i4
Bash 2 ----- wykład3i4kkk112
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki startSages
 
Erlang
ErlangErlang
Erlangkonryd
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)adamhmetal
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpadamhmetal
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwLuke Adamczewski
 
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Polcode
 

Similar to Bash 1 ----- wykład2i3 (10)

ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogo
 
Bash 2 ----- wykład3i4
Bash 2   -----      wykład3i4Bash 2   -----      wykład3i4
Bash 2 ----- wykład3i4
 
Python szybki start
Python   szybki startPython   szybki start
Python szybki start
 
Awk
AwkAwk
Awk
 
Erlang
ErlangErlang
Erlang
 
Python io
Python ioPython io
Python io
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty php
 
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketwAsynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
Asynchroniczny PHP i komunikacja czasu rzeczywistego z wykorzystaniem websocketw
 
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
Asynchroniczny PHP & komunikacja czasu rzeczywistego z wykorzystaniem websock...
 

Bash 1 ----- wykład2i3

  • 1. 1 PODSTAWY INFORMATYKI dr inż. Krzysztof Małecki Bash – literatura Wykład został opracowany na podstawie materiałów: http://www.ournet.pl/kursbasha/main.html
  • 2. 2 Bash • BASH (ang. Bourne Again SHell) to stworzony przez Briana Foxa i Cheta Rameya zgodny z sh interpreter poleceń, łączący w sobie zalety shella Korna (ksh) i C- shella (csh). • BASH to najbardziej popularna powłoka używana na systemach unixowych, jest też skryptowym językiem programowania, umożliwiającym efektywne zarządzanie systemem. • Skrypt – to niekompilowany tekstowy plik wykonywalny, zawierający pewne polecenia systemowe oraz polecenia sterujące jego wykonaniem (instrukcje, pętle itp.). Wykonywany jest tylko i wyłącznie przez interpreter (np. /bin/bash), który tłumaczy polecenia zawarte w skrypcie na język zrozumiały dla procesora. Przykładowe polecenia • ls (np. ls –l) – prawa dostępu ([d-katalog, l-dowiązanie], właściciel, grupa, do której należy właściciel, pozostali): drwxrwxrwx • man • apropos • mkdir • touch – zakładanie pliku (pico, vim, vi, mcedit,….) • cp • mv • rm – (np. rm –r nazwa_katalogu - kasowanie katalogu, niepustego) • cat – wyświetlenie zawartości zbioru
  • 3. 3 Echo • Polecenie echo – służy do wydrukowania na standardowym wyjściu (stdout - domyślnie jest to ekran) napisu podanego jako argument polecenia. echo "jakiś napis” • Można też pisać do pliku. echo "jakiś napis" > plik echo "jakiś napis" >> plik Kasowanie zawartości Dopisywanie na końcu Echo – parametry polecenia • -n nie jest wysyłany znak nowej linii • -e włącza interpretacje znaków specjalnych: – a alert, dzwonek – b backspace – c pomija znak kończący nowej linii – f escape – n form feed czyli wysuw strony – r znak nowej linii – t tabulacja pozioma – v tabulacja pionowa – backslash – nnn znak, którego kod ASCII ma wartość ósemkowo – xnnn znak, którego kod ASCII ma wartość szesnastkowo
  • 4. 4 Echo • $ echo Angielskie I’m • $ echo ‘Angielskie I’’’m’ • W tym przypadku zapis ‘’’ (apostrof, backslash, apostrof, apostrof) zadziała tak jakby apostrof znajdował się w ciągu znaków objętych apostrofami. Pierwszy znak ‘ w ciągu ‘’’ kończy pierwszy ciąg objęty apostrofami (‘Angielskie I’), ’ dodaje znak apostrofu, a następny apostrof rozpoczyna kolejny ciąg znaków objęty apostrofami, zawierający literę ‘m’. Pierwszy skrypt!! touch skrypt1 #!/bin/bash #Tu jest komentarz. echo "Witaj" • Znak # oznacza komentarz, interpreter pomija wszystko co znajduje się za nim w tej samej linii. • #! ma szczególne znaczenie - wskazuje na rodzaj shella w jakim skrypt ma być wykonany. • Ale to nie wszystko…
  • 5. 5 Pierwszy skrypt!! • Aby móc uruchomić skrypt należy mu jeszcze nadać atrybut wykonywalności za pomocą polecenia: chmod +x skrypt1 • Jeśli katalog bieżący w którym znajduje się skrypt nie jest dopisany do zmiennej PATH, to nasz skrypt możemy uruchomić następująco: ./skrypt1 chmod • chmod – chmod u+x, chmod u-x, – chmod +x, chmod -x, – chmod 777, – itd. • UWAGA: chmod 000 . Czy są inne możliwości?
  • 6. 6 read • Polecenie read – czyta ze standardowego wejścia pojedynczy wiersz. read -opcje nazwa_zmiennej Przykład: #!/bin/bash echo -n "Podaj swoje imię: " read imie echo "$imie" • zmienna nie musi być wcześniej tworzona, jeśli istniała wcześniej, to jej zawartość zostanie zastąpiona tym co wpisaliśmy. Wprowadzenie danych do zmiennej imie read – cd. Przykład: #!/bin/bash echo „Wpisz coś:” answer=„napis” read echo „$answer” Sposób zapisu!!!
  • 7. 7 read – cd. • Polecenie read pozwala na przypisanie kilku wartości kilku zmiennym. Przykład: • #!/bin/bash • echo „Wpisz cztery wartości:” • read a b c • echo „Wartość zmiennej a to: $a” • echo „Wartość zmiennej b to: $b” • echo „Wartość zmiennej c to: $c” Np. 5 7 8 3 A co tutaj będzie? read – wybrane opcje -p Pokaże znak zachęty bez kończącego znaku nowej linii. #!/bin/bash read -p "Podaj swoje imię :" odp echo "$odp" -a Kolejne wartości przypisywane są do kolejnych indeksów zmiennej tablicowej. #!/bin/bash echo „Podaj elementy zmiennej tablicowej:” read –a tablica echo "${tablica[*]}”
  • 8. 8 Cytowanie Znaki cytowania służą do usuwania interpretacji znaków specjalnych przez powłokę. • cudzysłów (ang. double quote): " " – do umieszczania tekstu, wartości zmiennych zawierających spacje. Cudzysłowy zachowują znaczenie specjalne trzech znaków: – $ wskazuje na nazwę zmiennej, umożliwiając podstawienie jej wartości, – znak maskujący, – ` ` odwrotny apostrof, umożliwia zacytowanie polecenia. Cytowanie – przykład #!/bin/bash x=2 echo "Wartość zmiennej x to $x" #wydrukuje Wartość zmiennej x to 2 echo -ne "Usłyszysz dzwoneka„ echo "Polecenie date pokaże: `date`"
  • 9. 9 Cytowanie – cd. • apostrof (ang. single quote): ' ' – Wszystko co ujęte w znaki apostrofu traktowane jest jak łańcuch tekstowy, apostrof wyłącza interpretowanie wszystkich znaków specjalnych, znaki traktowane są jak zwykłe znaki. • Przykład: #!/bin/bash echo '$USER' #nie wypisze loginu!!! Cytowanie – cd. • odwrotny apostrof (ang. backquote): ` ` – umożliwia zacytowanie polecenia, bardzo przydatne jeśli chce się podstawić pod zmienną wynik jakiegoś polecenia np: • Przykład: #!/bin/bash x=`ls -la $PWD` echo $x #pokaże rezultat polecenia Alternatywny zapis, który ma takie samo działanie: #!/bin/bash echo $(ls -la $PWD)
  • 10. 10 Cytowanie – cd. • backslash, czyli znak maskujący: • Przykład: – na ekranie ma pojawić się napis $HOME echo "$HOME" #wydrukuje /home/ja – aby wyłączyć interpretacje przez powłokę tej zmiennej, trzeba napisać: echo $HOME i jest napis $HOME ☺ Funkcje • Coś w rodzaju podprogramów. Stosuje się, gdy w skrypcie powtarza się jakaś grupa poleceń. • Do danej funkcji odwołujemy się podając jej nazwę, a wykonane zostanie wszystko, co wpisaliśmy między nawiasy { }. • Funkcje skracają znacznie długość skryptu. • Składnia: function nazwa_funkcji { polecenie1 polecenie2 … }
  • 11. 11 Funkcje – przykład #!/bin/bash function napis { echo "To jest napis" } napis wywołanie naszej funkcji Funkcje – cd. • Funkcje mogą się znajdować w innym pliku, co uczyni nasz skrypt bardziej przejrzystym i wygodnym, tworzy się własne pliki nagłówkowe, wywołuje się je tak: . ~/nasz_plik_z_funkcjami nazwa_funkcji Trzeba pamiętać o podaniu kropki i spacji przed nazwą pliku !!!!
  • 12. 12 Funkcje – przykład #!/bin/bash function nasza_funkcja { echo -e 'Właśnie użyłeś funkcji o nazwie "nasza_funkcja".a' } • Teraz pozostało jeszcze utworzyć skrypt, w którym wywołamy funkcję: nasza_funkcja: #!/bin/bash echo "Test funkcji." . funkcja nasza_funkcja Zmienne programowe (ang. program variables • Zmienne definiowane samodzielnie przez użytkownika. nazwa_zmiennej="wartość" Na przykład: x="napis" echo $x x = "napis" Błędny zapis !!!
  • 13. 13 Zmienne programowe – cd. Pod zmienną możemy podstawić wynik jakiegoś polecenia (dwa sposoby): 1. Poprzez użycie odwrotnych apostrofów: `polecenie` • Przykład: #!/bin/bash GDZIE_JESTEM=`pwd` #Wartością zmiennej GDZIE_JESTEM jest wynik działania polecenia pwd, które wypisze nazwę katalogu w jakim się w danej chwili znajdujemy. echo "Jestem w katalogu $GDZIE_JESTEM" Zmienne programowe – cd. 2. Za pomocą rozwijania zawartości nawiasów: $(polecenie) • Przykład: #!/bin/bash GDZIE_JESTEM=$(pwd) echo "Jestem w katalogu $GDZIE_JESTEM"
  • 14. 14 Zmienne specjalne (ang. special variables, special parameters) To najbardziej prywatne zmienne powłoki, są udostępniane użytkownikowi tylko do odczytu. • $0 – nazwa bieżącego skryptu lub powłoki #!/bin/bash echo "$0" #Pokaże nazwę naszego skryptu. • $1..$9 – Parametry przekazywane do skryptu (użytkownik może modyfikować ten rodzaj $-ych specjalnych). #!/bin/bash echo "$1 $2 $3" Zadziała w przypadku uruchomienia skryptu z parametrami!!! Zmienne specjalne – cd. • $@ – Pokaże wszystkie parametry przekazywane do skryptu (też wyjątek), równoważne $1 $2 $3..., jeśli nie podane są żadne parametry $@ interpretowana jest jako nic ☺. • Przykład: #!/bin/bash echo "Skrypt uruchomiono z parametrami: $@" ./plik parametr1 parametr2 • Wynik działania: Skrypt uruchomiono z parametrami: parametr1 parametr2
  • 15. 15 Zmienne specjalne – cd. • $? – kod powrotu ostatnio wykonywanego polecenia • $$ – PID procesu bieżącej powłoki Zmienne środowiskowe (ang.environment variables) Definiują środowisko użytkownika, dostępne dla wszystkich procesów potomnych. Wyróżniamy: – globalne - widoczne w każdym podshellu – lokalne - widoczne tylko dla tego shella, w którym zostały ustawione • Przykład: x="napis" #definicja zmiennej echo $x xterm #wywołanie podshella • ponowne wywołanie: echo $x nie pokaże nic, bo zmienne lokalne nie są widoczne w podshellach!!!
  • 16. 16 Zmienne środowiskowe – cd. • Inicjacja zmiennej globalnej: export x="napis" – Teraz zmienna x będzie widoczna w podshellach. Polecenie export nadaje wskazanym zmiennym atrybut zmiennych globalnych. – Polecenie export -p pozwala uzyskać listę aktualnie eksportowanych zmiennych. • usunięcie atrybutu eksportu dla danej zmiennej export -n zmienna Przykłady zmiennych środowiskowych $HOME #ścieżka do katalogu domowego $USER #twój login $HOSTNAME #nazwa twojego hosta $OSTYPE #rodzaj systemu operacyjnego • dostępne zmienne środowiskowe można wyświetlić za pomocą polecenia: printenv | more
  • 17. 17 Zmienne tablicowe • BASH pozwala na stosowanie zmiennych tablicowych jednowymiarowych. • Tablica? Zmienna, która przechowuje listę pewnych wartości (rozdzielonych spacjami). • w BASH'u nie ma maksymalnego rozmiaru tablic. • Kolejne wartości zmiennej tablicowej indeksowane są przy pomocy liczb całkowitych, zaczynając od 0. • Składnia zmienna=(wartość1 wartość2 wartość3 wartośćn) Zmienne tablicowe – przykład #!/bin/bash tablica=(element1 element2 element3) echo ${tablica[0]} echo ${tablica[1]} echo ${tablica[2]} • Do elementów tablicy odwołujemy się za pomocą wskaźników. ${nazwa_zmiennej[wskaźnik]} • Wskaźnikami są indeksy elementów tablicy: 0…n, @, *. echo ${tablica[*]} #to samo co powyżej
  • 18. 18 Zmienne tablicowe – cd. Można też uzyskać długość (liczba znaków) danego elementu tablicy: ${#nazwa_zmiennej[wskaźnik]} • Przykład: #!/bin/bash tablica=(element1 element2 element3) echo ${#tablica[0]} #liczba znaków pierwszego elementu tablicy, czyli 8. echo ${#tablica[@]} #liczba wszystkich elementów tablicy, czyli 3. Dodawanie elementów do tablicy nazwa_zmiennej[wskaźnik]=wartość #!/bin/bash tablica=(element1 element2 element3) tablica[3]=element4 echo ${tablica[@]} • BASH automatycznie utworzy tablicę, w przypadku dodania elementu do zmiennej nieistniejącej: #!/bin/bash linux[0]=slackware linux[1]=debian echo ${linux[@]} Tablica linux z dwoma elementami.
  • 19. 19 Usuwanie elementów tablic • Polecenie unset. unset nazwa_zmiennej[wskaźnik] #!/bin/bash tablica=(element1 element2 element3) echo ${tablica[@]} unset tablica[2] echo ${tablica[*]} Usunięty ostatni element tablicy. Usuwanie całych tablic • Aby usunąć całą tablicę wystarczy podać jako wskaźnik: @ lub *. #!/bin/bash tablica=(element1 element2 element3) unset tablica[*] echo ${tablica[@]} Ciekawe, co zostanie wyświetlone?
  • 20. 20 Wyrażenia arytmetyczne • mechanizm interpretacji wyrażeń arytmetycznych, • obliczenia dokonywane są na liczbach całkowitych, • nie przeprowadzana jest kontrola przepełnienia (ang. overflow). $((wyrażenie)) lub $[wyrażenie] • Przykład: #!/bin/bash echo $((8/2)) wynik=$[4*5/2] echo "$wynik" Wyrażenia arytmetyczne – cd. • Polecenie let • Przykład: #!/bin/bash liczba1=5 liczba2=6 let wynik=liczba1*liczba2 echo "$wynik"
  • 21. 21 Strumienie danych • stdin (ang. standard input), standardowe wejście, skąd proces pobiera dane, domyślnie jest to klawiatura • stdout (ang. standard output) to standardowe wyjście, wysyłany jest tam wynik działania procesu, domyślnie ekran • stderr (ang. standard error), standardowe wyjście błędów, tam trafiają wszystkie komunikaty o błędach, domyślnie ekran Deskryptory plików • Linux wszystko traktuje jako plik, niezależnie od tego czy to jest plik zwykły, katalog, urządzenie blokowe (klawiatura, ekran) itd. • Tak samo jest ze strumieniami, BASH identyfikuje je za pomocą przyporządkowanych im liczb całkowitych (0…2), tzw. deskryptorów plików: – 0 to plik, z którego proces pobiera dane: stdin, – 1 to plik, do którego proces pisze wyniki swojego działania stdout, – 2 to plik, do którego trafiają komunikaty o błędach stderr. • Za pomocą operatorów przypisania można manipulować strumieniami, poprzez przypisanie deskryptorów: 0, 1, 2 innym plikom, niż tym reprezentującym klawiaturę i ekran.
  • 22. 22 Przełączanie standardowego wejścia • Zamiast klawiatury jako standardowe wejście można otworzyć plik: < plik • Przykład: sort < lista • Wynik na ekranie: caldera debian redhat slackware Plik lista: slackaware redhat debian caldera Przełączanie standardowego wyjścia • Wynik jakiegoś polecenia można wysłać do pliku (z nadpisaniem lub z dopisaniem), a nie na ekran: > plik lub >> plik • Przykład: ls -la /usr/bin > ~/wynik • jeśli plik wynik wcześniej nie istniał, to zostanie utworzony, jeśli istniał cała jego poprzednia zawartość zostanie nadpisana. ls -la /usr/bin >> ~/wynik • jeśli plik wynik istniał to zawartość zostanie uzupełniona.
  • 23. 23 Przełączanie standardowego wyjścia błędów • Do pliku można też kierować strumień diagnostyczny: 2> plik • Przykład: #!/bin/bash echo "Stderr jest skierowane do pliku error" ls -y 2> ~/error #błąd ls -y 2>> ~/error #błąd Polecenie ls jest użyte z błędną opcją -y, komunikat o błędzie trafi do pliku error. Koniec Dziękuję za uwagę