- Menu g³ówne
- Newsy
- Forum
- Hackme 1.0
- Hackme 2.0
- Hackme 3.0
- Audiobooki
- Videoarty
- B³edy w PHP
- Linux
- Kurs PHP
- Kurs MySQL
- Kurs Smarty

- JavaScript
- ReverseCraft
- Assembler
- Delphi
- Pozostale
- Materia³y
- Artyku³y
- Security
- Linux
- Software
- Protoko³y
- Poka¿ wszystkie
..:: Kurs basha ::..
0 - Wstep 1 - Poczatek 2 - Slowa zastrzezone 3 - Zmienne oraz cytowanie 4 - Read 5 - Funkcje 6 - Obliczenia matematyczne 7 - Instrukcje warunkowe 8 - Petle 9 - Operacje na plikach 10 - Polecenia tr, cut, wc, exec
0 - Wstep
Co to jest w ogole bash ? Bash (Bourne Again Shell) - jest to jedna z wielu powlok wystepujacych w systemach unixowych, ktora laczy w sobie zalety ksh i csh. Glownymi jej programistami byli Briana Fox i Cheta Ramey. Poza tym bash jest takze jezykiem skryptowym.
1 - Poczatek
Na poczatek wpisujemy w konsoli:
bash-2.05b$ touch nazwa_skryptu
teraz jak juz mamy plik w ktorym bedziemy pisac nasz skrypt. Nastepnie edytujemy ten plik jednym z naszych ulubionych edytorow (scite, nedit, vi).
#!/bin/bash #Jakis komentarz echo "Hello world"
#! - wskazuje powloke w ktorej ma zostac wykonany nasz skrypt w naszym wypadku
jest to /bin/bash
# - oznacza komentarz, wszystko co znajduje sie sie po haszu jest pomijan przez
interpreter basha.
echo - jest to polecenie wyswietlajace dany napis na ekranie w naszym przypadku
"Hello world"
Polecenie echo moze takze zapisywac wyswietlony napis do pliku w nastepujacy sposob:
echo "Hello world" > nazwa_pliku - to polecenie czysci zawartosc podanego pliku i zapisuje w nim "Hello world" lub w przypadku nie istnieja
pliku tworzy go.
echo "Hello world" >> nazwa_pliku - to polecenie dospiuje na samym koncu pliku podany przez nas ciag znakow nie kasujac zawartosci pliku.
lub takze wystepowac z taiki parametrami jak :
* -n nie jest pokazany znak na koncu wiersza
* -e wlancza mozliwosc dodawania znakow:
\a - alert
\b - backspace
\c - to samo co z opcja -n
\e - escape
\f - line feed
\n - nowa linia
\r - powrot karetki (\f\r to jest to samo co \n)
\t - tabulacja pozioma
\v - tabulacja pionowa
\' - apostrof
\\ - backslash
\nnn - znak ascii o wartosci osemkowej
\xnn - znak ascii o wartosci szesnastkowej
No to juz gdy mamy napisany swoj pierwszy skrypt nalezy zapisac go oraz nadac mu odpowiedni atrybut wykonywalny. Atrybut pliku wykonywalnego nadajemy poleceniem:
bash-2.05b$ chmod +x nazwa_skryptu
No i tak oto napisalismy swoj pierwszy skrypt w bashu teraz pozostalo go nam tylko uruchomic w tym celu wpisujemy w konsoli nastepujace polecenie:
bash-2.05b$ ./nazwa_skryptu
2 - Slowa zastrzezone
Slowa zastrzezone sa to takie slowa lub znaki ktore wokonuja okreslone polecenia jesli chcemy uzyc ich w jakims zdaniu nalezy je zacytowac.
* !
* [
* ]
* {
* }
* case
* do
* for
* function
* if
* in
* select
* then
* done
* elif
* else
* esac
* fi
* until
* while
* time
3 - Zmienne oraz cytowanie
W cudzyslowie umieszczamy text, zmienne itp. Zmienna okreslamy podobnie jak w PHP znakiem $ np.
#!/bin/bash x=8 echo "Tu jest napisana liczba $x"
zmienne mozemy wykozystac takze do wykonywania konkretnych polecen np.:
#!/bin/bash x=`netstat` echo $x
polecenie to uruchamia nam netstat i pokazuje aktualny stan sieci.
Istnieja trzy rodzaje cudzyslowi
- "" - ciag znakow jest traktowany jako text
- '' - ciag znakow jest traktowany jako text
- `` - umozliwia cytowanie polecen
Istnieja takze znaki maskujace charakteryzujace sie \ (backslash) sluza one do wylanczania interpretacji zmiennych.
W bashu procz zmiennych programowych (to te cos sa opisane powyzej) wystepuja takze zmienne specjalne, srodowiskowe, oraz tablicowe.
Zmienne specjalne:
$0 - nazwa naszego skryptu $# - libcza przekazanych parametrow $$ - numer indentyfikacjny procesu skryptu (PID) $* - lista porozdzielanych parametrow $@ - lista parametrow z ktorymi zostal uruchomiony skrypt $? - kod ostatniego wykonywalnego polecenia $1,$2,$3,.. - poszczegolne parametry w uporzadkowanej kolejnosci
Zmienne srodowiskowe:
$HOME - sciezka do twojego katalogu domowego $USER - nazwa uzytkownika $HOSTNAME - host $HOSTTYPE - zmienna architektury procesora $OSTYPE - rodzaj systemu operacyjnego $LOGNAME - login
by uzyskac wszystkie zmienne srodowiskowe wpisz w konsoli printenv.
Zmienne tablicowe:
Moze zacznijmy w ogole od tego co sa zmienne tablicowe. Zmienne tablicowe sa to takie zmienne ktore przechowuja liste okreslonych wartosci. W bashu stosujemy tablice jednowymiarowe, nie ma okreslonego maxymalnego rozmiaru tablic. Zmienne tablicowe indexujemy liczbami calkowitymi zaczynajac od 0.Ponizej jest pokazany prosty przyklad z zastosowaniem tablic.
#!/bin/bash
tablica=(cos1 cos2 cos3 cos4)
echo ${tablica[0]}
echo ${tablica[1]}
echo ${tablica[2]}
echo ${tablica[3]}
Ponizsza funkcja pokaze nam z ilu znakow sklada sie 1 elemet w tabilcy w naszym wpadku bedzie to 4. jesli chcemy by pokazalo sie nam ile zmiennych posiadamy w tablicy wystarczy zamiast 0 wstawic @ lub *
#!/bin/bash
tablica=(cos1 cos2 cos3 cos4)
echo ${#tablica[0]}
Usuwanie wartosci z tablic jest bardzo prosta sluzy nam do tego funkcja unset a o to jej zastosowanie:
#!/bin/bash
tablica=(cos1 cos2 cos3 cos4)
unset tablica[3]
echo ${tablica[*]}
powyzszy skrypt usunie nam ostania wartosc z tablicy i wyswietli pozostale elementy.
4 - Read
Jesli ktos mial juz wczesniej stycznosc z programowaniem to wie ze polecenie read sluzy nam do wprowadzania danych. Ponizej jest podany przyklad zastosowania w bashu polecenia read wprowadza sie do niego napis ktory on nastepnie wyswietla jest to chyba najprostrzy przyklad zastosowania tego polecenia.
#!/bin/bash echo -en "Wpisz cos:\n" read wprowadzony_napis echo "$wprowadzony_napis"
5 - Funkcje
Ogolnie mowiac funkcje jest to jakies rozbudowane polecenie zazwyczaj stosowane wiele razy w programie. Funkcje zapisujemy w nastepujacy sposob:
function nazwa
{
instrukcja1
instrukcja2
}
jesli chcemy wywolac dana funkcje poprostu w kodzie zamieszczamy jej nazwe.
6 - Obliczenia matematyczne
Skladnie matematyczne mozemy zapisac w nastepujacy sposob:
#!/bin/bash echo $((6/2))lub
#!/bin/bash wynik=$[6/2] echo "$wynik"
mozna takze zastosowac polecenie let:
#!/bin/bash liczba1=6 liczba2=2 let wynik=liczba1/liczba2 echo "$wynik"
Operatory artmetyczne wystepujace w bashu:
-,+ - dodawanie odejmowanie *,/,% - mnozenie, dzielenie calkowite, reszta z dzielenia ** - potega !,~ - logiczna i bitowa negacja <<, >> - przesuniecia bitowe ^,&, | - bitowe XOR, AND, OR ||, && - logiczne OR i AND <=,>=,<,>,!=, == - porownania =,*=,/=,%=,+=,-=,<<=,>>=,&=,|=,^= - przypisania
7 - Instrukcje warunkowe
Instrukcje warunkowe mowiac najprosciej skladaja sie nastapujaco: "jesli cos to wtedy cos" w bashu warunek jezeli rozpoczynamy od if a konczymy go fi wygladac to bedzie tak:
#!/bin/bash if [ -e ~/.bash_history ] then echo "Plik .bash_history istnieje" fi
Powyzsza procedura sprawdza nam czy plik bash_history w naszym katalogu domowym istnieje, jesli istnieje zwraca napis "Plik .bash_history istnieje". Teraz rozbudujemy nasz skrypt o przeczenie czyli co sie stanie gdy warunek bedzie falszywy.
#!/bin/bash if [ -e ~/.bash_history ] then echo "Plik .bash_history istnieje" else echo "Plik .bash_history nie istnieje" fi
polecenie else wykonuje sie wtedy gdy warunek jest falszywy. Mozna takze stosowac wiele warunkow co ulatwia nam polecenie elif.
#!/bin/bash if [ -e ~/.bash_history ]; then echo "Plik .bash_history istnieje" elif [ -e ~/.bash_profile ]; then echo "Plik .bash_profile istnieje" else echo "Plik .bash_history i bash_profile nie istnieja" fi
Powyzszy program sprawdza nam czy pliki .bash_history oraz .bash_profile istnieja jesli oba nie istnieja skrypt zwraca nam napis
"Plik .bash_history i bash_profile nie istnieja"Jesli zauwazyliscie do powyzszy skryptow sotosowalem operatora -e sprawdza on czy dany plik istnieje. Ponizej sa podane operatory stosowane w bashu.
Operatory:
-a plik
Prawda jesli plik istnieje.
-b plik
Prawda jesli plik istnieje i jest blokowym plikiem
specjalnym.
-c plik
Prawda jesli plik istnieje i jest znakowym plikiem
specjalnym.
-d plik
Prawda jesli plik istnieje jest katalogiem.
-e plik
Prawda jesli plik istnieje.
-f plik
Prawda jesli plik istnieje i jest plikiem zwyklym.
-g plik
Prawda jesli plik istnieje i ma ustawiony bit set-
group-id.
-h plik
Prawda jesli plik istnieje i jest dowiazaniem sym
bolicznym.
-k plik
Prawda jesli plik istnieje i ma ustawiony bit
-p plik
Prawda jesli plik istnieje i jest potokiem nazwanym
(FIFO).
-r plik
Prawda jesli plik istnieje i daje sie czytac.
-s plik
Prawda jesli plik istnieje i ma rozmiar wiekszy niz
zero.
-t fd Prawda jesli deskryptor pliku fd jest otwarty i
odnosi sie do terminala.
-u plik
Prawda jesli plik istnieje i ma ustawiony bit set-
user-id.
-w plik
Prawda jesli plik istnieje i daje sie don zapisac.
-x plik
Prawda jesli plik istnieje i jest wykonywalny.
-O plik
Prawda jesli plik istnieje i jego wlascicielem jest
efektywny id uzytkownika.
-G plik
Prawda jesli plik istnieje i jego wlascicielem jest
efektywny id grupy.
-L plik
Prawda jesli plik istnieje i jest dowiazaniem sym
bolicznym.
-S plik
Prawda jesli plik istnieje i jest gniazdem.
-N plik
Prawda jesli plik istnieje i byc zmieniany od czasu
ostatniego jego odczytu.
plik1 -nt plik2
Prawda jesli plik1 jest nowszy (wedlug daty mody
fikacji) od pliku2.
plik1 -ot plik2
Prawda jesli plik1 jest starszy niz plik2.
plik1 -ef plik2
Prawda jesli plik1 i plik2 maja ten sam numer
urzadzenia i i-wezla.
-o nazwa_opcji
Prawda jesli opcja powloki nazwa_opcji jest
wlaczona. Zobacz zestawienie opcji w opisie opcji
-o wbudowanego set, ponizej.
-z lancuch
Prawda jesli dlugosc lancucha wynosi zero.
-n lancuch
Prawda jesli lancuch ma dlugosc niezerowa.
lancuch1 == lancuch2
Prawda jesli lancuchy sa rowne. Zamiast == mozna
uzyc =.
lancuch1 != lancuch2
Prawda jesli lancuchy nie sa rowne.
W instrukcjach warunkowych istenije takze dokonywanie wyborow oznacza sie ono poleceniem case oto prosty skrypt z zastosowaniem owego polecenia:
#!/bin/bash echo "w ktorym miesiacu rozpoczynaja sie wakacje: (podaj liczbe)" read miesiac case "$miesiac" in "6") echo "Wakacje rozpoczynaja sie w czerwcu" ;; "7") echo "Wakacje rozpoczynaja sie w lipcu" ;; *) echo "nie podales zadnej wartosci" esac
8 - Petle
Petla jest to poprosu okreslone polecenie ktore ma sie wykonywac okreslana ilosc razy w bashu wyrozniamy nastepujace petle: for, while, until i select.
Petla for:Na ponizszym przykadzie proste zastosowanie petli for wykazuje nam ona wszystkie pliki z rozszerzeniem mp3 ktore znajduja sie w danym katalogu
#!/bin/bash for zmienna in *.mp3 do echo "W tym katalogu znajduje sie plik mp3 o nazwie $zmienna" donePetla while:
Mozna ja zastosowac do prostych hasel skryptowych czy np do sprawdzenia czy jakas operacja zostala wykonana. Zasada jej dzialania jest dosc prosta petla ta sprawdza czy warunek zostal spelniony jezeli tak to wykonuje dalsze polecenie natomiast jesli jest niespoelniony powraca do pierwotnej postaci.
#!/bin/bash i=1; while [ $i ]; do echo "Napis ten wyswietla sie poraz $i " i=$(($i+1)) done
powyzsza petla wyswietla dany napis nieskonczola ilosc razy za kazdym razem dodajac do niego o jeden nr wiecej.
Petla until:Jest to petla bardzo podobna do petli while z ta mala roznica ze warunek jest wykonywany do tej pory dopuki warunek jest niespelniony jesli zas warunek zostaje spelniony petla natychmiast zostaje przerwana. Ponizsza petla sprawdza co 1 sekunde czy root sie zalogowal jesli tak wyswietla nam o tym komunikat.
#!/bin/bash until who | grep root > /dev/null do sleep 1 done echo "root jest zalogowany"Petla select:
W tej petli mozemy zastosowac warunek wyboru case. Ponizszy skrypt obrazuje skladnie petli select.
#!/bin/bash echo "Jaki dzis dzien tygodnia ??" select x in Poniedzialek Wtorek Sroda Czwartek \ Piatek Sobota Niedziela Wyjscie do case $x in "Poniedzialek") echo "Dzis mamy Poniedzialek" ;; "Wtorek") echo "Dzis mamy Wtorek" ;; "Sroda") echo "Dzis mamy Srode" ;; "Czwartek") echo "Dzis mamy Czwartek" ;; "Piatek") echo "Dzis mamy Piatek" ;; "Sobota") echo "WDzis mamy Sobote" ;; "Niedziela") echo "Dzis mamy Niedziele" ;; "Wyjscie") exit ;; *) echo "no i nie wiesz jaki dzis mamy dzien tygodnia" esac break done
9 - Operacje na plikach
Pobieranie oraz zapisywanie do plikow roznych danych w bashu jest bardzo proste sluza nam do tego nastepujace operatory:
< - pobieranie danych z pliku > - zapisuje dane do pliku kasujac jego wczesniejsza zawartosc >> - zapisuje dane na koncu danego pliku
przyklad zapisywania zostal podany w rozdziale "Poczatek" wiec nie bedziemy powtarzac tego co juz bylo.
10 - Polecenia tr, cut, wc, exec
tr:
Polecenie mozemy to stosowac w usuwaniu lub zamienianiu znakow ze standardowego wejscia, polecenie tr mozemy stosowac z operatorami:
-c dopelnia pierwszy zbior -d usuwa znaki zawartw w pierwszym zbiorze -s zastepuje sekwenecje powtorzonych znakow
cut:
Polecenie to wycina okreslony fragment. Moze wystepowac z nastepujacymi operatorami:
-c pokaze nam wyliczone znaki w danym pliku -d tabulacje -f wypisuje wyliczone polajesli chcecie poznac wiecej operatorow nalezy wipasc cut --help lub man cut
wc:
Polecenie to wypisuje nam ilosc lini, slow oraz bajtow ktore sa zawarte w danym pliku. Moze wystepowac z operatorami:
-c pokazuje ilosc bajtow -w pokazuje ilosc slow -l pokazuje ilosc liniiexec:
polecenie to pozwala nam uruchomic dany program z roznymi parametrami.
************************** *Copyright 2005 by Itros * ************************** |
Uwa¿asz, ¿e prezentowane przez nas informacje s± u¿yteczne? Pomó¿ nam je wypromowaæ!
- Subskrypcja
- Je¶li chcesz byæ powiadamiany o nowo¶ciach na stronie, wpisz tu swój e-mail




Shell status: 

