Mai avansat în cazul utilizării

Aceasta este construcția de utilizat pentru a lua un curs de acțiune dacă comenzile if testează adevărat și altul dacă testează false. Un exemplu:

cazul

freddy scripts> gender = "male" freddy scripts> if [["$ gender" == "f *"]] Mai multe informații> atunci ecou „Plăcerea de a vă cunoaște, madame”. Mai multe informații> altfel ecou "Cum se face că doamna nu a băut încă?" Mai multe informații> fi Cum se face că doamna nu a băut încă? scripturi freddy>

Spre deosebire de [, [[împiedică împărțirea cuvintelor valorilor variabile. Deci, dacă VAR = "var cu spații", nu trebuie să citiți dublu VAR $ într-un test - deși folosirea ghilimelelor rămâne un obicei bun. De asemenea, [[previne extinderea căii de acces, așa că șirurile literal cu metacaracter nu încearcă să se extindă la nume de fișiere. Folosind [[, == și! = Interpretează șirurile din dreapta ca modele de glob de shell care trebuie asortate cu valoarea din stânga, de exemplu: [["valoare" == val *]] .

La fel ca lista CONSEQUENT-COMMANDS care urmează declarației de atunci, lista ALTERNATE-CONSEQUENT-COMMANDS care urmează instrucțiunii else poate conține orice comandă în stil UNIX care returnează o stare de ieșire.

Un alt exemplu, extinzându-l pe cel din secțiunea 7.1.2.1:

> su - Parolă: [root @ elegance root] # if! grep ^ $ USER/etc/passwd 1>/dev/null> apoi ecou "contul dvs. de utilizator nu este gestionat local"> altfel ecou "contul dvs. este gestionat din fișierul local/etc/passwd"> fi contul dvs. este gestionat din fișierul local/etc/passwd [root @ elegance root] #

Trecem la contul rădăcină pentru a demonstra efectul declarației else - rădăcina dvs. este de obicei un cont local, în timp ce propriul dvs. cont de utilizator ar putea fi gestionat de un sistem central, cum ar fi un server LDAP.

În loc să setați o variabilă și apoi să executați un script, este adesea mai elegant să puneți valorile variabilelor pe linia de comandă.

Folosim parametrii de poziție $ 1, $ 2,. $ N în acest scop. $ # se referă la numărul de argumente din linia de comandă. $ 0 se referă la numele scriptului.

Următorul este un exemplu simplu:

Figura 7-1. Testarea unui argument de linie de comandă cu if

Iată un alt exemplu, folosind două argumente:

> cat weight.sh #!/bin/bash # Acest script tipărește un mesaj despre greutatea dvs. dacă îi dați greutatea dvs. în kilograme și înălțimea în centimetri. weight = "$ 1" height = "$ 2" idealweight = $ [$ height - 110] if [$ weight -le $ idealweight]; apoi ecou „Ar trebui să mănânci ceva mai mult grăsime”. altfel ecou „Ar trebui să mănânci ceva mai mult fruct.” fi anny

> bash -x weight.sh 55 169 + weight = 55 + height = 169 + idealweight = 59 + '[' 55 -le 59 ']' + echo 'Ar trebui să mănânci ceva mai mult grăsime.' Ar trebui să mănânci ceva mai mult grăsime.

Următorul exemplu arată cum să modificați scriptul anterior, astfel încât acesta să imprime un mesaj dacă sunt date mai mult sau mai puțin de 2 argumente:

> cat weight.sh #!/bin/bash # Acest script tipărește un mesaj despre greutatea dvs. dacă îi dați greutatea dvs. în kilograme și înălțimea în centimetri. dacă [! $ # == 2]; apoi ecou „Utilizare: $ 0 weight_in_kilos length_in_centimeters” exit fi weight = "$ 1" height = "$ 2" idealweight = $ [$ height - 110] if [$ weight -le $ idealweight]; apoi ecou „Ar trebui să mănânci ceva mai mult grăsime”. altfel ecou „Ar trebui să mănânci ceva mai mult fruct.” fi anny

> greutate.sh 70 150 Ar trebui să mănânci un pic mai mult fruct. Anny

> weight.sh 70 150 33 Utilizare: ./weight.sh weight_in_kilos length_in_centimeters

Primul argument este denumit 1 $, al doilea ca 2 $ și așa mai departe. Numărul total de argumente este stocat în $ # .

Acest test se face într-o mulțime de scripturi, deoarece nu are rost să pornești o mulțime de programe dacă știi că nu vor funcționa:

#!/bin/bash # Acest script oferă informații despre un fișier. FILENAME = "$ 1" echo "Proprietăți pentru $ FILENAME:" dacă [-f $ FILENAME]; apoi ecou "Dimensiunea este $ (ls -lh $ FILENAME | awk '< print $5 >') "echo" Tipul este $ (fișier $ FILENAME | cut -d ":" -f2 -) "echo" Numărul codului este $ (ls -i $ FILENAME | cut -d " -f1 -) "echo" $ (df ​​-h $ FILENAME | grep -v Montat | awk '< print "On",$1", \ which is mounted as the",$6,"partition.">') "else echo" Fișierul nu există. "fi