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