|
www.ispwsznysa.fora.pl Informatyka Stosowania PWSZ NYSA
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
ja
Gość
|
Wysłany: Nie 12:09, 11 Maj 2008 Temat postu: Wprowadzenie do programowania w bash-u |
|
|
Wprowadzenie do programowania w bash-u
Linux ma wbudowaych wiele kompilatorów różnych języków programowania, zaletą Linuksa jest również to, że można pisać skrypty w jego powłoce (shell).
Pisanie skryptów w powłoce linuksowej jest bardzo pożyteczną rzeczą. Jest w penym sensie ułatwieniem, ponieważ zamiast wpisywania szeregu poleceń, możemy wywołać skrypt, który zrobi to za nas. Mam tu na myśli np.montowanie dyskietki czy partcji Win - za pomocą skryptów można je zamontować i odmontować, wpisując jedynie ich nazwę.
Skrypty mogą wyglądać bardzo różnie,mogą ograniczać się do kilku linii lub mogą używać skomplikowanych pętli i warunków.
Do pisania skryptów polecam edytory tekstowe (vi,kate). Skrypt w pierweszej linii zawiera polecenie "#!/bin/bash" jest to odnośnik do shella w jakim piszemy. Skrypty uruchamiamy tak jak każdy inny program, aby go uruchomić należy mu nadać prawo wykonywalności (chmod +x skrypt).
Tak jak w każdym języku programowania tak i w tym przypadku mamy do czynienia ze zmiennymi, funkcjami, pętlami itp. No ale zacznijmy od pierwszego prostego skryptu:
W linii poleceń piszemy vi skrypt
-----cut here------------
#!/bin/bash
echo "pierwszy skrypt"
-----cut here------------
Skrypt ten wypisze nam na ekranie napis "pierwszy skrypt". Proste prawda?
Jak widać polecenie 'echo' wypisuje text na ekran, znaki poprzedzone haszem(#) traktowane są jako komentarze. Jeśli chcemy aby nasz skrypt wykonał jakieś polecenie piszemy je w skrypcie w nastepujący sposób:
--------cut hir---------
#!/bin/bash
mount cdrom /mnt/cdrom
-----cut hir------------
Ten skrypt będzie montował nam cdrom w katalogu mnt. Są to bardzo proste skrypty i chyba zrozumiałe nawet dla początkującego programisty.
Przejdźmy więc do zmiennych. Zmienne można deklarować w każdym miejscu skryptu, możemy je przedstawić jako liczby, znaki i łancuchy znaków .np:
zmienna=4
zmienna=s
znienna=lańcuch
Jeśli chcemy odwołać się do wartości zmiennej dopisujemy przed nią znak $ np:
echo $liczba
echo $znak
echo $lańcuch
Jest możliwość wywołania skryptu z argumentem, np:
./skrypt argument1 argument2
Agumenty numerujemy od 1 do 9. Do ich wartości odwołujemy się jak do zwykłych zmiennych tzn.
echo $2 ---- wyświetli nam agument2
Nieznaczy to wcale, że argumentów nie może być wiecej, jeśli argumentów jest wiecej używamy polecenia 'shift', przesuwa ono argument o jedną pozycję w lewo.
Tracimy 1, ale zyskujemy 10 (jedynkę można przypisać innej zmiennej) np:
---------cut here-------------
#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9
shift
echo $1 $2 $3 $4 $5 $6 $7 $8 $9
---------cut here------------
Wywołanie :
./skrypt a b c d e f g h i
a b c d e f g h i
b c d e f g h i j
Istnieją zmienne, które przechowują wszystkie argumenty jest to zmienna:
$@ - zawiera ona listę argumentów, do których można się odwołać.
$* - argumenty są łączone w ciągi.
Są jeszcze inne zmienne oto one:
$$ - zwraca PID aktualnego procesu
$! - zwraca PID ostatnio wywołanego procesu
$? - zwraca kod wyjścia polecenia
Pętle to kolejne zagadnienie jakim się zajmiemy zacznijmy od instrukcji warunkowej 'if' - można ją wywołać w następujący sposób:
---------cut here----------
if [warunek]
then
(coś robi)
else
(coś innego robi)
fi
---------cut here----------
---------cut here---------
if[warunek]
then
(coś robi)
elif[inny warunek]
then
(cos innego robi)
else
(coś całkiem innego)
fi
---------cut here------------
Następne pętle to 'while' oraz 'until:
------cut here--------
until[warunek]
do
(coś robi)
done
------cut here--------
------cut here--------
while[warunek]
do
(coś robi)
done
------cut here--------
Pętle nie mogą być puste. Jeśli chcemy mieć pustą pętlę możemy wpisać polecenie ':'
Pętla 'until' wykonywana jest dopóki warunek jest fałszem, natomiast 'while' dopóki jest prawdą.
Teraz pętla 'for':
for zmienna in lista
do
done
Oto prosty przykład :
---------cut here--------
#!/bin/bash
a=1
for((a=1;a<10;a++))
do
echo "LINUX"
done
---------cut here--------
Skrypt ten napisze nam dziesięć razy "LINUX", składnia petli for jest bardzo podobna do składni z jezyka C/C++. Proszę zwrócić uwagę na podwójne nawiasy!!!
Polecenie 'test' służy do sprawdzania warunków. Oto lista warunków, których możemy używać:
#########łańcuchy###########
-z łańcuch - łańcuch ma zerową długość
-n łańcuch - łańcuch ma długość wiekszą od zera
łańcuch1=łańcuch2 - łańcuchy są równe
łańcuch1 != łańcuch2 - łancuchy sa różne
#######liczby całkowite#######
L1 -ge L2 - L1 jest większa bądź równa L2
L1 -lt L2 - L1 jest mniejsza niż L2
L1 -le L2 - L1 jest mniejsza bądz równa L2
L1 -eq L2 - liczby równe
L1 -ne L2 - liczby różne
L1 -gt L2 - L1 większa od L2
##########pliki##############
-b plik - plik jest plikiem blokowym
-p plik - plik jest nazwanym potokiem
-u plik - plik ma ustawiony bit SUID
-g plik - plik ma ustawiony bit SGID
-x plik - plik ma nadane prawo do wykonywania
-f plik - plik istnieje i jest zwyklym plikiem (nie jest np. katalogiem)
-d plik - plik jest katalogiem
-c plik - plik jest plikiem znakowym
-k plik - plik ma ustawiony sticky bit
-s plik - plik nie jest pusty
-r plik - plik ma nadane prawo do odczytu
-w plik - plik ma nadane prawo do zapisu
Metaznaki są to znaki, które zastepują inne znaki,może na początek przedstawie niektóre z nich a potem wyjaśnienia.
'^' - początek wiersza
'?' - jeden dowolny znak
'*a' - łańcuch który ma pierwszą literkę 'a'
'+' - jeden lub wiecej dowolnych znaków
Jeśli naprzykład chcemy wywołać nasz skrypt dla wszystkich plików zaczynający sie na literę a to piszemy:
./skrypt a*
Niektóre znaki specjalne wymagają tak zwanego "maskowania" do maskowania służy znak "". Oto lista znaków które maskujemy :
"." - kropka
"~" - tylda
"'" - apostrof
"\" - backslash
"/" - slash
"""" - cudzysłów
Na przykład jeśli chcemy na ekranie wyświetlić znak "\" to musimy napisać "\\" Mam nadzieje że jest to zrozumiałe.
Przedstawione tu przykłady - to podstawy programowania w shellu, mam nadzieje że artykuł jest zrozumiały i czytelny pytania proszę kierować pod adres [link widoczny dla zalogowanych].
|
|
Powrót do góry |
|
|
|
|
|
|
Możesz pisać nowe tematy Możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group
|