If-Koubou

Vodič za početnike Shell Scripting 4: Uvjeti i ako-onda izjave

Vodič za početnike Shell Scripting 4: Uvjeti i ako-onda izjave (Kako da)

U vodiču smo pokrili dovoljno osnova za skriptiranje ljuske da biste se trebali osjećati ugodno pokusavajući. U ovog tjedna ćemo se boriti s nekim od zabavnih stvari, kao što su uvjeti i "if-then" izjave.

Koji su uvjeti?

U svakodnevnom jeziku, kažemo da su uvjeti zahtjevi koji moraju biti ispunjeni da bi se nešto dogodilo. Da bi se moj laptop mogao povezati s internetom, postoji nekoliko uvjeta koji moraju biti ispunjeni, kao da imamo ISP, modem i / ili usmjerivač koji je uključen, uključen moj laptop, itd. Prilično je jednostavan i ako je netko od tih zahtjeva nisu ispunjeni, rezultat - moj laptop spajanje na internet - ne događa.

Na sličan način funkcioniraju u području računanja. Možemo testirati hoće li niz nalik drugom nizu, bez obzira da li se ne podudara s drugim nizom, pa čak i ako uopće postoji. Slično tome, možemo testirati numeričke argumente da bismo vidjeli je li velika od, manje ili jednaka drugoj. Da bi se nešto dogodilo nakon što se ispune uvjeti testiranja, koristimo "if-then" izjave. Njihov format je prilično jednostavan.

ako je CONDITION
zatim
command1
command2

commandn
fi

Ako su izjave

Pokrenimo brzu probnu skriptu, zar ne?

ako je test $ 1 - $ 2
zatim
echo "$ 1 je veći od $ 2"
fi

Primijetit ćete da će samo ako je to točno, skript će izvršiti sljedeću naredbu. Inače, izjava "if" izlazi. Ako postoje naredbe nakon "if" izjave, onda će se izvoditi kao normalno. Dodala sam sljedeću retku do kraja gore navedenog skripte da bismo ovo ilustrirali:

echo "Ovo dolazi nakon if izjave"

Evo nekih drugih numeričkih operatera koje biste trebali isprobati:

  • -ekv: jednako
  • -ne: nije jednako
  • -lt: manje od
  • -le: manje ili jednako
  • -gt: veći od
  • -ge: veći ili jednak

Ispitivanje žica

Sada, ako izmijenimo prvu liniju našeg scenarija da bismo ovo bili:

ako je test $ 1 = $ 2

tada će uvjet testirati ako su dva jednaka. Ovdje je ulov! Upotreba znaka jednakosti (=) uspoređuje dvije žice, a ne brojeve. Ako želite usporediti brojeve, trebali biste upotrijebiti operator "-eq" slično načinu na koji smo upotrebljavali gore navedeni "-gt".

Sada napravimo još jednu izmjenu:

ako je test $ 1! = $ 2

Uključivanje uskličnika (!) Djeluje kao "ne" modifikator. To jest, ona pokreće samo sljedeću naredbu kada se dvije žice ne podudaraju.

Evo popisa nekih testova koji se temelje na nizu:

  • string: pomoću samo argumenta sama po sebi ispituje ako string nije prazan (null) ili nije definiran na neki način
  • -n string: to će testirati ako string nije prazan i definiran
  • -z string: to će testirati ako je niz prazan i definiran na taj način

Što drugo o slučaju?

Priznajem da je taj naslov dijela bio definitivno loš pun. U redu, znamo izvršiti naredbu ako je test istinit, ali što ako želimo izvršiti drugu naredbu ako je to lažno? Jednostavno možemo staviti dva zajedno dodavanjem odjeljka našim "ako-onda" izjavama - "drugo"!

ako je CONDITION
zatim
command1
command2

commandn
drugo
command1
command2

commandn
fi

Skupimo jednostavnu skriptu.

Ima svega s pravilnim uvlačenjem. Ako pomno pogledate, primijetit ćete da smo umjesto testne naredbe koristili kvadratne zagrade ([i]). Funkcionalno su ekvivalentne našim ciljevima, i mnogo je vjerojatnije da ćete vidjeti uglate zagrade iz raznih razloga pa ćemo ih sada koristiti.

Evo kako će izgledati izlaz:

Tako je lako!

Što sada radim?

Sada kad znate koristiti izjave "if-then-else", možete pokrenuti skripte koje mogu izvesti testove. Na primjer, možete pokrenuti skriptu koja će izračunati md5 hash datoteke, a zatim ga usporediti s onim koji ste preuzeli u datoteci kako biste provjerili odgovaraju li se.

Za neke bonus bodove možete stvoriti skriptu koja ima "for" petlju, ali koristi testne uvjete umjesto čitanja linija iz datoteke popisa ...

Dobivamo neke od zanimljivijih dijelova u našem vodiču za početnike Shell Scripting. Ako ste propustili prethodne lekcije, evo kratkog popisa za provjeru:

  1. Osnove Shell skriptiranja
  2. Korištenje za petlje
  3. Više osnovnih naredbi
  4. Koje su razlike između Linux školjki?
  5. Kako koristiti osnovne regularne izraze

Ako ste napravili ili upotrebljavali skripte koje koriste uvjete testiranja, izjave u slučaju "da" i "za", podijelite s nama dolje u komentarima!