Primjer Bash ako-onda-drugi

Bash If Then Else Example

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:



Ako je Primjer

Ako je Primjer

Evo rezultata koji vidimo kada pokrenemo skriptu:

$. ifelse1.sh
Vrijednosti 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.txt

Vidjet ćemo izlaz poput:

Pronalaženje ljubaviuhello.txt
ljubav 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=# USD
ako [ ! $ count -gt 1 ]
zatim
izbaciti 'Nema dovoljno argumenata'
drugo
izbaciti 'Dobar posao!'
biti

Pokrenimo sada ovu skriptu, vidjet ćemo sljedeći izlaz:

Argumenti naredbenog retka

Argumenti naredbenog retka

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=# USD
ako [ $ 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:

Ako onda primjer Elif Else

Ako onda primjer Elif Else

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' u
1)
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:

Primjer SLUČAJA

Primjer SLUČAJA

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.