Bash skripte: početak

Bash skripte: početak
Bash skripte 2. dio: petlje
Bash skripte, dio 3: opcije komandne linije i prekidači
Bash skripte, dio 4: ulaz i izlaz
Bash skripte, dio 5: signali, pozadinski zadaci, upravljanje skriptama
Bash skripte, dio 6: Funkcije i razvoj biblioteke
Bash skripte, dio 7: sed i obrada teksta
Bash skripte, 8. dio: Jezik za obradu podataka awk
Bash skripte Deo 9: Regularni izrazi
Bash skripte 10. dio: praktični primjeri
Bash skripte, 11. dio: očekivanje i automatizacija interaktivnih uslužnih programa

Danas ćemo pričati o bash skriptama. Ovo - skripte komandne linije, napisano za bash shell. Postoje i druge ljuske, kao što su zsh, tcsh, ksh, ali ćemo se fokusirati na bash. Ovaj materijal je namenjen svima, jedini uslov je sposobnost za rad komandna linija Linux.

Bash skripte: početak

Skripte komandne linije su skupovi istih komandi koje se mogu uneti sa tastature, sakupiti u fajlove i objediniti nekom zajedničkom svrhom. Istovremeno, rezultati rada timova mogu imati ili nezavisnu vrijednost ili poslužiti kao input za druge timove. Skripte su moćan način za automatizaciju često izvođenih radnji.

Bash skripte: početak

Dakle, ako govorimo o komandnoj liniji, ona vam omogućava da izvršite nekoliko naredbi odjednom, unoseći ih tačkom i zarezom:

pwd ; whoami

Zapravo, ako ste ovo isprobali u svom terminalu, vaša prva bash skripta koja koristi dvije komande je već napisana. Radi ovako. Tim prvi pwd prikazuje informacije o trenutnom radnom direktoriju, zatim naredbu whoamiprikazuje informacije o korisniku pod kojim ste prijavljeni.

Koristeći ovaj pristup, možete kombinovati koliko god naredbi želite u jednoj liniji, ograničenje je samo maksimalni broj argumenata koji se mogu proslijediti programu. Ovo ograničenje možete definirati sljedećom naredbom:

getconf ARG_MAX

Komandna linija je odličan alat, ali morate unijeti komande u nju svaki put kada vam zatrebaju. Šta ako napišemo skup naredbi u datoteku i jednostavno pozovemo tu datoteku da ih izvršimo? U stvari, datoteka o kojoj govorimo zove se skripta komandne linije.

Kako funkcionišu bash skripte

Kreirajte praznu datoteku koristeći naredbu touch. U prvom redu morate odrediti koju ljusku ćemo koristiti. Zainteresovani smo za bash, tako da bi prvi red datoteke bio:

#!/bin/bash

Na drugom mjestu u ovoj datoteci, heš simbol se koristi za označavanje komentara koje ljuska ne obrađuje. Međutim, prvi red je poseban slučaj, to je znak funte iza kojeg slijedi uzvičnik (ovaj niz se zove shebang) i put do bash, ukazuje sistemu da je skripta kreirana posebno za bash.

Komande ljuske su odvojene linijom, komentari su odvojeni znakom funte. Evo kako to izgleda:

#!/bin/bash
# This is a comment
pwd
whoami

Ovdje, baš kao i na komandnoj liniji, možete pisati naredbe u jednom redu, odvajajući ih tačkom i zarezom. Međutim, ako pišete naredbe u različitim redovima, fajl je lakše čitati. U svakom slučaju, školjka će ih obraditi.

Postavljanje dozvola za datoteku skripte

Sačuvajte datoteku dajući joj ime myscript, a bash skripta je skoro gotova. Sada ostaje samo da ovu datoteku učinite izvršnom, inače, kada pokušate da je pokrenete, naići ćete na grešku Permission denied.

Bash skripte: početak
Pokušaj pokretanja datoteke skripte s pogrešno konfiguriranim dozvolama

Učinimo datoteku izvršnom:

chmod +x ./myscript

Sada pokušajmo da ga izvršimo:

./myscript

Nakon postavljanja dozvola, sve radi kako treba.

Bash skripte: početak
Uspješno pokrenite bash skriptu

Izlaz poruke

Za ispis teksta na Linux konzoli koristite naredbu echo. Iskoristimo znanje o ovoj činjenici i uredimo našu skriptu, dodajući objašnjenja podacima koji izlaze komande koje su već u njemu:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Evo šta se dešava nakon pokretanja ažurirane skripte.

Bash skripte: početak
Izlaz poruka iz skripte

Sada možemo prikazati oznake s objašnjenjima pomoću naredbe echo. Ako ne znate kako urediti datoteku koristeći Linux alate, ili ako ranije niste vidjeli naredbu echo, pogledaj ovo materijal.

Korištenje varijabli

Varijable vam omogućavaju pohranjivanje informacija u datoteku skripte, kao što su rezultati naredbi, za korištenje drugim naredbama.

Nema ničeg lošeg u izvršavanju pojedinačnih naredbi bez pohranjivanja rezultata njihovog rada, ali su mogućnosti ovog pristupa vrlo ograničene.

Postoje dvije vrste varijabli koje se mogu koristiti u bash skriptama:

  • Varijable okruženja
  • Korisničke varijable

Varijable okruženja

Ponekad komande ljuske moraju da rade sa nekim sistemskim podacima. Na primjer, evo kako prikazati kućni direktorij trenutnog korisnika:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Imajte na umu da možemo koristiti sistemsku varijablu $HOME pod navodnicima, to neće spriječiti sistem da ga prepozna. Evo šta se dešava ako pokrenete gornju skriptu.

Bash skripte: početak
Korištenje varijable okruženja u skripti

Ali šta ako želite da prikažete znak dolara? Hajde da probamo ovo:

echo "I have $1 in my pocket"

Sistem će otkriti znak dolara u nizu ograničenom navodnicima i pretpostaviti da smo referencirali varijablu. Skripta će pokušati prikazati vrijednost nedefinirane varijable. $1. Ovo nije ono što nam treba. sta da radim?

U ovakvoj situaciji pomaže korištenje kontrolnog znaka obrnute kose crte prije znaka dolara:

echo "I have $1 in my pocket"

Skripta će sada ispisati tačno ono što se očekuje.

Bash skripte: početak
Korištenje izlazne sekvence za izlaz znaka dolara

Korisničke varijable

Pored varijabli okruženja, bash skripte vam omogućavaju da postavite i koristite vlastite varijable u skripti. Takve varijable drže vrijednost dok se skripta ne završi.

Kao i kod sistemskih varijabli, korisničkim varijablama se može pristupiti pomoću znaka dolara:
TNW-CUS-FMP - promo kod za 10% popusta na naše usluge, dostupan za aktivaciju u roku od 7 dana

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Evo šta se dešava nakon pokretanja takve skripte.

Bash skripte: početak
Prilagođene varijable u skripti

Zamjena komandi

Jedna od najkorisnijih karakteristika bash skripti je mogućnost izdvajanja informacija iz izlaza naredbi i dodjeljivanja ih varijablama, što vam omogućava da koristite ove informacije bilo gdje u datoteci skripte.

Ovo se može uraditi na dva načina.

  • Sa pozadinskim znakom "`"
  • Uz pomoć izgradnje $()

Kada koristite prvi pristup, pazite da ne koristite jedan navodnik umjesto kvačice. Naredba mora biti zatvorena u dvije takve ikone:

mydir=`pwd`

U drugom pristupu, isto se piše ovako:

mydir=$(pwd)

A skripta bi na kraju mogla izgledati ovako:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Tokom svog rada, izlaz komande pwdće biti pohranjen u varijablu mydir, čiji sadržaj pomoću naredbe echo, ići će na konzolu.

Bash skripte: početak
Skripta koja sprema rezultate naredbe u varijablu

Matematičke operacije

Da biste izvršili matematičke operacije u datoteci skripte, možete koristiti konstrukciju obrasca $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Bash skripte: početak
Matematičke operacije u skripti

struktura kontrole ako-onda

U nekim scenarijima, potrebno je kontrolirati tok izvršenja naredbe. Na primjer, ako je određena vrijednost veća od pet, mora se izvršiti jedna radnja, u suprotnom druga. Ovo je primjenjivo u mnogim situacijama, a tu će nam pomoći struktura kontrole if-then. U svom najjednostavnijem obliku, to izgleda ovako:

if команда
then
команды
fi

A evo radnog primjera:

#!/bin/bash
if pwd
then
echo "It works"
fi

U ovom slučaju, ako je izvršenje naredbe pwduspješno završi, tekst "radi" će biti prikazan na konzoli.

Iskoristimo znanje koje imamo i napišimo složeniji scenario. Recimo da moramo pronaći korisnika /etc/passwd, i ako je pronađeno, prijavite da postoji.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Ovo se dešava nakon pokretanja ove skripte.

Bash skripte: početak
Potražite polʹzovatelâ

Ovdje smo koristili naredbu grepza traženje korisnika u datoteci /etc/passwd. Ako tim grepkoji vam nije poznat, njegov opis možete pronaći ovdje.

U ovom primjeru, ako je korisnik pronađen, skripta će prikazati odgovarajuću poruku. Šta ako se korisnik ne može pronaći? U ovom slučaju, skripta će jednostavno završiti izvršenje bez da nam ništa kaže. Volio bih da nam kaže i o tome, pa hajde da poboljšamo kod.

Kontrolna konstrukcija ako-onda-drugo

Da bi program mogao izvesti i rezultate uspješne pretrage i neuspjeha, koristimo konstrukciju if-then-else. Evo kako je postavljeno:

if команда
then
команды
else
команды
fi

Ako prva naredba vrati nulu, što znači da je uspješno izvršena, uvjet će biti istinit i izvršenje neće ići duž grane else. U suprotnom, ako se vrati nešto drugo osim nule, što znači neuspjeh ili lažan rezultat, naredbe nakon else.

Hajde da napišemo sledeću skriptu:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Njegovo pogubljenje je išlo niz liniju else.

Bash skripte: početak
Pokretanje skripte sa konstrukcijom if-then-else

Pa, idemo dalje i zapitamo se o težim uslovima. Šta ako trebate provjeriti ne jedan uslov, već nekoliko? Na primjer, ako je traženi korisnik pronađen, jedna poruka bi trebala biti prikazana, ako je ispunjen neki drugi uvjet, trebala bi se prikazati druga poruka itd. U takvoj situaciji će nam pomoći ugniježđeni uslovi. izgleda ovako:

if команда1
then
команды
elif команда2
then
команды
fi

Ako prva naredba vrati nulu, što ukazuje na njeno uspješno izvršenje, naredbe u prvom bloku će se izvršiti then, inače, ako je prvi uslov netačan i ako druga naredba vrati nulu, drugi blok koda će se izvršiti.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

U takvoj skripti možete, na primjer, kreirati novog korisnika pomoću naredbe useradd, ako pretraga nije dala rezultate ili uradite nešto drugo korisno.

Poređenje brojeva

U skriptama možete upoređivati ​​numeričke vrijednosti. Ispod je lista relevantnih komandi.

n1 -eq n2Vraća true if n1 jednako n2.
n1 -ge n2 Vraća true if n1više ili jednako n2.
n1 -gt n2Vraća true if n1 više od n2.
n1 -le n2Vraća true if n1manje ili jednako n2.
n1 -lt n2Vraća istinito ako je n1 manje od n2.
n1 -ne n2Vraća true if n1nije jednako n2.

Kao primjer, pokušajmo s jednim od operatora poređenja. Imajte na umu da je izraz zatvoren u uglastim zagradama.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Evo šta će ova komanda dati.

Bash skripte: početak
Upoređivanje brojeva u skriptama

Varijabilna vrijednost val1veći od 5, na kraju se grana izvršava thenoperator poređenja i odgovarajuća poruka se prikazuje u konzoli.

Poređenje nizova

Skripte također mogu upoređivati ​​vrijednosti nizova. Operatori poređenja izgledaju prilično jednostavno, ali operatori poređenja nizova imaju određene specifičnosti, kojih ćemo se dotaknuti u nastavku. Evo liste operatera.

str1 = str2 Testira stringove na jednakost, vraća true ako su nizovi identični.
str1 != str2Vraća true ako stringovi nisu identični.
str1 < str2Vraća true if str1manje od str2.
str1 > str2 Vraća true if str1više nego str2.
-n str1 Vraća true ako je dužina str1Iznad nule.
-z str1Vraća true ako je dužina str1jednako nuli.

Evo primjera poređenja nizova u skripti:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Kao rezultat izvršavanja skripte, dobijamo sljedeće.

Bash skripte: početak
Poređenje stringova u skriptama

Evo jedne karakteristike poređenja stringova koja je vrijedna spomena. Naime, operatori ">" i "<" moraju biti izbačeni sa obrnutom kosom crtom, inače skripta neće raditi ispravno, iako se neće pojaviti poruke o grešci. Skripta tumači znak ">" kao naredbu za preusmjeravanje izlaza.

Evo kako rad sa ovim operatorima izgleda u kodu:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Evo rezultata skripte.

Bash skripte: početak
Poređenje nizova, upozorenje bačeno

Imajte na umu da skripta, iako se izvršava, daje upozorenje:

./myscript: line 5: [: too many arguments

Da bismo se riješili ovog upozorenja, zaključujemo $val2 u duplim navodnicima:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Sada sve radi kako treba.

Bash skripte: početak
Poređenje nizova

Još jedna karakteristika ">" i "<" operatora je način na koji rade sa velikim i malim slovima. Da bismo razumeli ovu funkciju, pripremimo tekstualni fajl sa sledećim sadržajem:

Likegeeks
likegeeks

Sačuvajte ga pod imenom myfilea zatim pokrenite sljedeću naredbu u terminalu:

sort myfile

On će sortirati redove iz fajla ovako:

likegeeks
Likegeeks

tim sort, po defaultu, sortira nizove uzlaznim redoslijedom, što znači da je malo slovo u našem primjeru manje od velikog slova. Sada pripremimo skriptu koja će upoređivati ​​iste nizove:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Ako ga pokrenete, ispostaviće se da je suprotno - malo slovo je sada veće od velikog.

Bash skripte: početak
sortiranje naredbi i poređenje stringova u skript datoteci

U naredbama za poređenje, velika slova su manja od malih slova. Poređenje nizova ovdje se vrši poređenjem ASCII znakovnih kodova, stoga redoslijed sortiranja ovisi o kodovima znakova.

tim sort, zauzvrat, koristi redoslijed sortiranja naveden u postavkama jezika sistema.

Provjere datoteka

Možda se donje naredbe najčešće koriste u bash skriptama. Oni vam omogućavaju da provjerite različite uvjete u vezi s datotekama. Evo liste ovih naredbi.

-d fileProvjerava da li datoteka postoji i da li je direktorij.
-e fileProvjerava postoji li datoteka.
-f file Provjerava da li datoteka postoji i da li je datoteka.
-r fileProvjerava da li datoteka postoji i da li je čitljiva.
-s file ПProvjerava da li datoteka postoji i nije li prazna.
-w fileProvjerava da li datoteka postoji i da li je moguće pisati.
-x fileProvjerava da li datoteka postoji i da li je izvršna.
file1 -nt file2 Provjerava da li je novije file1nego file2.
file1 -ot file2Provjerava da li je stariji file1nego file2.
-O file Provjerava da li datoteka postoji i da li je u vlasništvu trenutnog korisnika.
-G fileProvjerava da li datoteka postoji i da li njen ID grupe odgovara ID-u grupe trenutnog korisnika.

Ove komande, kao i mnoge druge o kojima se danas raspravlja, lako se pamte. Njihova imena, kao skraćenice za različite riječi, direktno ukazuju na provjere koje obavljaju.

Isprobajmo jednu od naredbi u praksi:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Ova skripta, za postojeći direktorij, će prikazati njegov sadržaj.

Bash skripte: početak
Ispisivanje sadržaja direktorija

Vjerujemo da s ostalim naredbama možete sami eksperimentirati, sve se primjenjuju po istom principu.

Ishodi

Danas smo razgovarali o tome kako započeti pisanje bash skripti i pokrili neke osnovne stvari. U stvari, tema bash programiranja je ogromna. Ovaj članak je prijevod prvog dijela velike serije od 11 materijala. Ako želite da nastavite odmah, evo liste originala ovih materijala. Radi praktičnosti, ovdje je uključen onaj čiji ste prijevod upravo pročitali.

  1. Bash skripta korak po korak - ovdje govorimo o tome kako započeti kreiranje bash skripti, razmatra se korištenje varijabli, opisane su uvjetne konstrukcije, proračuni, poređenja brojeva, nizova, pronalaženje informacija o datotekama.
  2. Bash Scripting Dio 2, Bash je super - ovdje se otkrivaju karakteristike rada sa for i while petljama.
  3. Bash Scripting Dio 3, Parametri i opcije - ovaj materijal je posvećen parametrima komandne linije i ključevima koji se mogu proslijediti skriptama, radu sa podacima koje korisnik unosi i koji se mogu čitati iz datoteka.
  4. Bash skriptiranje, dio 4, ulaz i izlaz - ovdje govorimo o deskriptorima datoteka i radu s njima, o ulazu, izlazu, greškama, tokovima preusmjeravanja izlaza.
  5. Bash Scripting Dio 5, Sighals & Jobs — ovaj materijal je posvećen Linux signalima, njihovoj obradi u skriptama, planiranom pokretanju skripte.
  6. Bash Scripting Dio 6, Funkcije - ovdje možete naučiti o kreiranju i korištenju funkcija u skriptama, o razvoju biblioteka.
  7. Bash skriptiranje, dio 7, korištenje sed — ovaj članak govori o radu sa uređivačem teksta sed stream.
  8. Bash skriptiranje, dio 8, korištenje awk — ovaj materijal je posvećen programiranju u jeziku za obradu podataka awk.
  9. Bash Scripting Dio 9, Regularni izrazi - ovdje možete pročitati o upotrebi regularnih izraza u bash skriptama.
  10. Bash skriptiranje, dio 10, praktični primjeri - evo metoda za rad sa porukama koje se mogu slati korisnicima, kao i metoda za praćenje diska.
  11. Bash Scripting Dio 11, Očekujte naredbu - ovaj materijal je posvećen alatu Expect, pomoću kojeg možete automatizirati interakciju s interaktivnim uslužnim programima. Konkretno, ovdje se radi o očekivanim skriptama i načinu na koji one djeluju s bash skriptama i drugim programima.

Smatramo da je jedna od sjajnih stvari u ovoj seriji članaka to što počinje od najosnovnijeg, pogodnog za korisnike bilo kojeg nivoa, postepeno vodi do prilično ozbiljnih tema, dajući svima priliku da napreduju u skriptiranju Linux komandne linije.

Dragi čitaoci! Zamolimo gurue bash-programiranja da pričaju o tome kako su došli do vrhova majstorstva, podijele tajne, a čekamo utiske onih koji su upravo napisali svoj prvi scenarij.

Bash skripte: početak

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Prevesti ostatak serije članaka?

  • Da!

  • Ne, nema potrebe

Glasalo je 1030 korisnika. Uzdržano je bilo 106 korisnika.

izvor: www.habr.com

Dodajte komentar