U ovoj lekciji ćemo vidjeti kako možemo koristiti naredbe If-Then-Else u skriptama Bash okruženja koje pišemo. Naredbe If-Then-Else koristan su alat za pružanje načina definiranja putanje djelovanja skripte kada su ispunjeni neki uvjeti. Pogledajmo koja je sintaksa za naredbe If-Then-Else:
akoNEKE ZAPOVIJEDE;zatimONDA-ZAPOVIJEDI;
drugoOSTALE ZAPOVIJEDE;
biti
U gornjoj prikazanoj naredbi, ako se utvrdi da su SOME-COMMANDS točne ili je status vraćanja 0, izvršit će se THEN-COMMANDS. Ako to nije slučaj, izvršavaju se ELSE-COMMANDS. U NEKOVIJEDNIM ZAPOVIJEDIMA obično radimo neku usporedbu nizova ili usporedbu vrijednosti u obliku cijelih brojeva. Također možemo obaviti mnogo operacija koje uključuju datoteke. Pogledajmo neke primjere primarnih naredbi koje se uglavnom koriste pri radu s datotečnim uvjetima:
Primarni | Značenje |
---|---|
[-to] | Vraća true ako FILE postoji. |
[-b] | Vraća true ako FILE postoji & je posebna datoteka za blok. |
[-c] | Vraća vrijednost true ako FILE postoji & je datoteka s posebnim znakovima. |
[-d] | Vraća true ako FILE postoji & je direktorij. |
[-I] | Vraća true ako FILE postoji. |
[-f] | Vraća true ako FILE postoji & je obična datoteka. |
[-g] | Vraća true kada postoji FILE i ako je postavljen njegov SGID bit. |
[-h] | Vraća vrijednost true ako FILE postoji & je simbolična veza. |
[-k] | Vraća true ako FILE postoji i ako je postavljen njezin ljepljivi bit. |
[-p] | Vraća true ako FILE postoji & je imenovana cijev (FIFO). |
[-r] | Vraća true ako FILE postoji i može se čitati. |
[-s] | Vraća true ako FILE postoji i ima veličinu veću od nule. |
[-t] | Vraća true kada je opis datoteka FD otvoren i odnosi se na terminal. |
[-u] | Vraća vrijednost true ako FILE postoji i ako je postavljen njegov SUID (set user ID) bit. |
[-in] | Vraća true ako FILE postoji i na koje se može pisati. |
[-x] | Vraća true kada FILE postoji i izvršava se. |
[-O] | Vraća vrijednost true ako FILE postoji i posjeduje efektivni korisnički ID. |
[-G] | Vraća vrijednost true ako FILE postoji i u vlasništvu je efektivnog ID -a grupe. |
[-THE] | Vraća vrijednost true ako FILE postoji & je simbolična veza. |
[-N] | Vraća true ako FILE postoji i je promijenjena od zadnjeg čitanja. |
[-S] | Vraća true ako FILE postoji & je utičnica. |
THEN-COMMANDS i ELSE-COMMANDS mogu biti bilo koje valjane UNIX operacije ili bilo koji izvršni program. Imajte na umu da zatim i biti naredbe su odvojene točkom i zarezom jer se smatraju potpuno odvojenim elementima skripte.
Primjer ako-onda-drugi jednostavan
Počnimo našu lekciju vrlo jednostavnim primjerom s izjavama If-Then-Else.
Evo primjera programa:
Evo rezultata koji vidimo kada pokrenemo skriptu:
$. ifelse1.shVrijednosti su iste!
$
Korištenje argumenata naredbenog retka
Također možemo koristiti argumente naredbenog retka u našim skriptama i koristiti broj argumenata i same vrijednosti kao uvjet u IF izrazu koji definiramo. Prvo definiramo tekstualnu datoteku sa sljedećim sadržajem:
Moje ime je LinuxHint. Volim poslužitelje, pogotovo Ubuntu. Oni su takvi
krajnji!
Sada možemo napisati skriptu koja otkriva pojavljuje li se riječ u tekstualnoj datoteci ili ne. Odredimo sada skriptu:
izbaciti 'Pronalaženje 1 USD u 2 USD'zahvat 1 USD 2 USD
ako [ $? -rođen 0 ]
zatim
izbaciti '$ 1 nije pronađen u datoteci $ 2.'
drugo
izbaciti '$ 1 pronađeno u datoteci $ 2.'
biti
izbaciti 'Skripta dovršena.'
Ova je skripta vrlo dinamična. Ona razmatra riječ za pronalaženje i datoteku za pretraživanje iz samog naredbenog retka. Sada smo spremni za pokretanje naše skripte:
. ifelse2.sh ljubav hello.txtVidjet ćemo izlaz poput:
Pronalaženje ljubaviuhello.txtljubav pronađenau datotekahello.txt.
Skripta dovršena.
Provjera broja argumenata naredbenog retka
Unutar IF naredbe možemo čak provjeriti koliko je argumenata naredbenog retka poslano naredbi kako bismo mogli djelovati prema istoj:
računati=# USDako [ ! $ count -gt 1 ]
zatim
izbaciti 'Nema dovoljno argumenata'
drugo
izbaciti 'Dobar posao!'
biti
Pokrenimo sada ovu skriptu, vidjet ćemo sljedeći izlaz:
Izjave Ako-onda-Elif-Ostalo
Također možemo imati više IF naredbi u istom bloku kako bismo suzili put odlučivanja koji naš program izvodi za izvršavanje naredbi koje smo definirali. Evo sintakse za definiranje više IF izraza u našim skriptama:
akoTEST-ZAPOVIJEDI;zatim
REZULTAT-ZAPOVIJEDI;
elif
JOŠ JEDNE-ZAPOVIJEDE;
zatim
DRUGI REZULTAT-ZAPOVIJEDI;
drugo
ZAMJENE-ZAPOVIJEDI;
biti
Ovo izgleda prilično poznato i lako ga je pratiti. Definirajmo jednostavan primjer da ustanovimo kako stablo funkcionira:
računati=# USDako [ $ count -ekv 1 ]
zatim
izbaciti 'Pronađen je samo jedan argument.'
elif [ $ count -ekv 2 ]
zatim
izbaciti 'Bolje, pronađena su dva argumenta.'
drugo
izbaciti 'Dobar posao, pronađeno je mnogo argumenata!'
biti
Evo što dobivamo ovom naredbom:
Korištenje ispisa predmeta
IF-ELSE izjave su korisne ako imate veliki popis mogućnosti na koje se morate odlučiti. No, u slučaju da želite izvršiti radnju samo u nekoliko slučajeva potpunog podudaranja s rezultatom, možemo koristiti i CASE izraze u Bash skriptama. Njegova sintaksa izgleda ovako:
slučajIZRAZuSLUČAJ1)ZAPOVIJEDI-IZVRŠITI;SLUČAJ2)ZAPOVIJEDI-IZVRŠITI;
SLUČAJ2)ZAPOVIJEDI-IZVRŠITI;
...)ZAPOVIJEDI-IZVRŠITI;
*)ZAPOVIJEDI-IZVRŠITI;
esac
Posljednji slučaj sa * djeluje kao zadani slučaj i izvršit će se ako se ne pronađe niti jedan od gore definiranih slučajeva koji se podudara.
Napravimo brzo jednostavan primjer koristeći naredbe CASE:
slučaj '1 USD' u1)
izbaciti 'Vrijednost je 1.'
;;
2)
izbaciti 'Vrijednost je 2.'
;;
3)
izbaciti 'Vrijednost je 3.'
;;
*)
izbaciti 'Prošla je druga vrijednost.'
esac
Svaki CASE izraz završava ;; (dvostruke oznake točke sa zarezom). Evo što dobivamo ovom naredbom:
Zaključak
U ovoj smo lekciji pogledali kako možemo koristiti izraze IF-ELSE, IF-THEN-ELIF i CASE u Bash skriptama koje definiramo za poduzimanje određenih radnji na temelju vrijednosti koje postoje u našim programima ili su ih korisnici prenijeli pomoću pozicijskog parametri.