..:: 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"
done
Petla 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 pola
jesli 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 linii
exec:

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æ!

  • dodaj do flakera
  • blipnij o tym
Kana³ RSS
Co na forum?
Jak odzyskaæ...
Pêtla foreach
poszukuje po...
Problem z fu...
poszukuje do...
ServerShell status: dzia³a
[zaló¿ konto]
Koszulki z nadrukiem
Subskrypcja
Je¶li chcesz byæ powiadamiany o nowo¶ciach na stronie, wpisz tu swój e-mail

RSS

Dodaj do Google