Ръководство за начинаещи за Shell Scripting 4 Условия & Ако-тогава изявления
В нашето ръководство за скриптове за скриптове сме обхванали достатъчно от основните неща, които трябва да се чувстват комфортно. В тази седмица ще разгледаме някои от по-забавните неща, като например условия и изявления "ако-тогава".
Какви са условията?
В ежедневния език казваме, че условията са изисквания, които трябва да бъдат изпълнени, за да се случи нещо. За да мога лаптопът ми да се свърже с интернет, има няколко условия, които трябва да бъдат изпълнени, като например да имаш ISP, модемът и / или маршрутизаторът са включени, лаптопът ми е включен и т.н. от тези изисквания не са изпълнени, резултатът - моят лаптоп се свързва с интернет - не се случва.
Условията в областта на изчислителната работа също. Можем да тестваме дали даден низ съвпада с друг низ, дали той не съвпада с друг низ или дори да съществува изобщо. По същия начин можем да тестваме числени аргументи, за да видим дали един е по-голям от, по-малък или равен на друг. За да се случи нещо, след като условията на теста са изпълнени, ние използваме изявления "ако-тогава". Техният формат е доста прост.
ако СЪСТОЯНИЕ
тогава
command1
command2
...
commandn
Fi
Ако отчети
Нека направим бърз малък тестов скрипт?
ако тествате $ 1 -gt $ 2
тогава
ехо „$ 1 е по-голямо от $ 2“
Fi
Ще забележите, че само когато това условие е вярно, скриптът ще изпълни следната команда. В противен случай операторът "if" ще излезе. Ако има някакви команди след оператора "if", тогава те ще се изпълняват както обикновено. Добавих следния ред в края на горния си скрипт, за да илюстрирам това:
echo "Това идва след изявлението if"
Ето някои други цифрови оператори, които може да искате да изпробвате:
- -eq: равен на
- -ne: не е равно на
- -lt: по-малко от
- -le: по-малко или равно на
- -gt: по-голямо от
- -ge: по-голямо или равно на
Тестване на низове
Сега, ако променим първия ред на нашия скрипт, така ще бъде:
ако тест $ 1 = $ 2
тогава условието ще тества, ако двете са равни. Тук обаче има улов! Използването на знак за равенство (=) сравнява две низове, а не числа. Ако искате да сравните числа, трябва да използвате оператора „-eq“, подобно на начина, по който използвахме „-gt“ по-горе.
Сега, нека направим друга модификация:
ако тествате $ 1! = $ 2
Включването на удивителен знак (!) Действа като „не” модификатор. Това означава, че изпълнява само следната команда, когато двата низа не съвпадат.
Ето списък на някои по-стриктни тестове, които можете да използвате:
- string: използва само аргумент сам по себе си тестове, ако низът не е празен (null) или не е определен по някакъв начин
- -n string: ще тества дали низът не е празен и е дефиниран
- -z string: ще тества дали низът е празен и е определен по този начин
Какво още за Ако?
Ще призная, че заглавието на секцията определено беше лош игра. Добре, знаем как да изпълним команда, ако тестът е верен, но какво ще стане, ако искаме да изпълним друга команда, ако е невярна? Лесно можем да поставим двете заедно, като добавим раздел към нашите изявления "ако-тогава" - "друго"!
ако СЪСТОЯНИЕ
тогава
command1
command2
...
commandn
още
command1
command2
...
commandn
Fi
Нека съберем един прост скрипт.
Има всичко с подходящо вдлъбнатина. Ако се вгледате внимателно, ще забележите, че използвахме квадратни скоби ([и]) вместо тестовата команда. Те са функционално еквивалентни за нашите цели и е много по-вероятно да видите квадратните скоби по различни причини, затова ще ги използваме оттук нататък..
Ето как ще изглежда изходът:
Толкова е лесно!
Какво да правя сега?
Сега, след като знаете как да използвате изрази "if-then-else", можете да стартирате скриптове, които могат да извършват тестове. Например можете да изпълните скрипт, който да изчисли md5 хеш на файл и след това да го сравните с този, който сте изтеглили във файл, за да видите дали съвпадат.
За някои бонус точки можете да създадете скрипт, който има "за" цикъл, но използва тестови условия вместо четене на линии от файл с списък ...
Ще се запознаем с някои от по-интересните части в нашето Ръководство за начинаещи на Shell Scripting. Ако сте пропуснали предишните уроци, ето един бърз списък, който можете да проверите:
- Основи на скриптовете на Shell
- Използване за цикли
- Още основни команди
- Какви са разликите между Linux обвивките?
- Как се използват основните регулярни изрази
Ако сте направили или използвали скриптове, които използват условия за тестване, изрази if-then-else и "for", споделете с нас в коментарите!