Пример за баш ако-след-друго

Bash If Then Else Example



В този урок ще видим как можем да използваме изрази If-Then-Else в скриптове на Bash среда, които пишем. Изявленията If-Then-Else са полезен инструмент за предоставяне на начин за дефиниране на пътя на действие на скрипта, когато са изпълнени някои условия. Нека да видим какъв е синтаксисът за инструкциите If-Then-Else:

акоНЯКОИ КОМАНДИ;
тогаваТОГАВА КОМАНДИ;
иначеДРУГИ КОМАНДИ;
бъда

В горната показана команда, ако се установи, че SOME-COMMANDS е вярно или състоянието му на връщане е 0, THEN-COMMANDS ще бъдат изпълнени. Ако това не е така, се изпълняват ДРУГИ КОМАНДИ. В SOME-COMMANDS обикновено правим сравнение на низове или сравнение на стойности под формата на цели числа. Също така можем да правим много операции, които включват файлове. Нека разгледаме някои примери за първични команди, които се използват главно при работа с файлови условия:







Първичен Смисъл
[ -да се ] Връща true, когато FILE съществува.
[-b] Връща true, когато FILE съществува & е специален за блок файл.
[-° С] Връща true, когато FILE съществува & е специален файл за знаци.
[ -д ] Връща true, когато FILE съществува & е директория.
[ -И ] Връща true, когато FILE съществува.
[-f] Връща true, когато FILE съществува & е обикновен файл.
[-g] Връща true, когато FILE съществува и неговият SGID бит е зададен.
[-h] Връща true, когато FILE съществува & е символична връзка.
[-k] Връща true, когато FILE съществува и неговият лепкав бит е зададен.
[-p] Връща true, когато FILE съществува & е именувана тръба (FIFO).
[-r] Връща true, когато FILE съществува и се чете.
[ -с ] Връща true когато FILE съществува и има размер по -голям от нула.
[ -T ] Връща true, когато файловият дескриптор FD е отворен и се отнася до терминал.
[-u] Връща true когато FILE съществува и неговият SUID (set user ID) бит е зададен.
[-в] Връща true, когато FILE съществува и може да се записва.
[-х] Връща true, когато FILE съществува и е изпълним.
[-O] Връща true, когато FILE съществува и е собственост на ефективния потребителски идентификатор.
[-G] Връща true, когато FILE съществува и е собственост на ефективния идентификатор на групата.
[-ТЕ] Връща true, когато FILE съществува & е символична връзка.
[ -Н ] Връща true, когато FILE съществува и е променен от последното му четене.
[ -С ] Връща true, когато FILE съществува & е гнездо.

THEN-COMMANDS и ELSE-COMMANDS могат да бъдат всякакви валидни UNIX операции или всяка изпълнима програма. Имайте предвид, че тогава и бъда командите са разделени с точка и запетая, тъй като се считат за напълно отделни елементи на скрипта.



Ако-тогава-друг прост пример

Нека започнем нашия урок с един много прост пример с изрази If-Then-Else.
Ето примерна програма:



Ако Пример

Ако Пример





Ето резултата, който виждаме, когато изпълняваме нашия скрипт:

$. ifelse1.sh
Стойностите са едни и същи!
$

Използване на аргументи от командния ред

Можем също да използваме аргументи от командния ред в нашите скриптове и да използваме броя на аргументите и самите стойности като условие в израза IF, който дефинираме. Първо дефинираме текстов файл със следното съдържание:



Казвам се LinuxHint. Обичам сървъри, особено Ubuntu. Те са такива
терминален!

Сега можем да напишем скрипт, който намира дали дадена дума се среща в текстов файл или не. Нека сега определим скрипта:

изхвърлен 'Намиране на $ 1 в $ 2'
захващане $ 1 $ 2
ако [ $? -роден 0 ]
тогава
изхвърлен '$ 1 не е намерен във файл $ 2.'
иначе
изхвърлен '$ 1 намерени във файл $ 2.'
бъда
изхвърлен 'Скриптът е завършен.'

Този скрипт е много динамичен. Той разглежда думата за намиране и файла за търсене от самия команден ред. Сега сме готови да изпълним нашия скрипт:

. ifelse2.sh любов hello.txt

Ще видим изход като:

Намиране на любоввhello.txt
любовта е намеренав файлhello.txt.
Сценарият е завършен.

Проверка на броя на аргументите на командния ред

В рамките на оператор IF можем дори да проверим колко аргументи от командния ред са предадени на командата, за да можем да действаме по същия начин:

броя=$ #
ако [ ! $ count -gt 1 ]
тогава
изхвърлен „Няма достатъчно аргументи“
иначе
изхвърлен 'Добра работа!'
бъда

Нека стартираме този скрипт сега, ще видим следния изход:

Аргументи на командния ред

Аргументи на командния ред

Изявления Ако-Тогава-Елиф-Друго

Можем също да имаме множество IF изрази в един и същ блок, за да стесним пътя на решение, който нашата програма предприема, за да изпълнява команди, които сме дефинирали. Ето синтаксиса за дефиниране на множество IF изрази в нашите скриптове:

акоТЕСТ-КОМАНДИ;
тогава
РЕЗУЛТАТ-КОМАНДИ;
elif
ДРУГИ КОМАНДИ;
тогава
ДРУГИ РЕЗУЛТАТ-КОМАНДИ;
иначе
АЛТЕРНАТИ-КОМАНДИ;
бъда

Това изглежда доста познато и лесно за проследяване. Нека определим един прост пример, за да установим как работи дървото:

броя=$ #
ако [ $ count -екв 1 ]
тогава
изхвърлен 'Намерен е само един аргумент.'
elif [ $ count -екв 2 ]
тогава
изхвърлен 'По -добре, намерени са два аргумента.'
иначе
изхвърлен „Добра работа, намерени са много аргументи!“
бъда

Ето какво получаваме с тази команда:

Ако тогава Elif Else пример

Ако тогава Elif Else пример

Използване на съобщения за случаи

Изявленията IF-ELSE са полезни, когато имате голям списък от опции, за които трябва да решите. Но в случай, че искате да извършите действие само в няколко случая на точно съвпадение с резултата, можем да използваме CASE изрази и в скриптове на Bash. Неговият синтаксис изглежда така:

случайИЗРАЗЯВАНЕвСЛУЧАЙ 1)КОМАНДИ ЗА ИЗВЪРШВАНЕ;
СЛУЧАЙ 2)КОМАНДИ ЗА ИЗВЪРШВАНЕ;
СЛУЧАЙ 2)КОМАНДИ ЗА ИЗВЪРШВАНЕ;
...)КОМАНДИ ЗА ИЗВЪРШВАНЕ;
*)КОМАНДИ ЗА ИЗВЪРШВАНЕ;
esac

Последният случай с * действа като случай по подразбиране и ще бъде изпълнен, когато не се установи, че никой от гореописаните случаи не съвпада.

Нека бързо конструираме прост пример, използвайки изразите CASE:

случай „$ 1“ в
1)
изхвърлен „Стойността е 1.“
;;
2)
изхвърлен „Стойността е 2.“
;;
3)
изхвърлен „Стойността е 3.“
;;
*)
изхвърлен „Друга стойност премина.“
esac

Всеки CASE израз се прекратява от ;; (двойни знаци с точка и запетая). Ето какво получаваме с тази команда:

Пример CASE

Пример CASE

Заключение

В този урок разгледахме как можем да използваме изразите IF-ELSE, IF-THEN-ELIF и CASE в скриптовете Bash, които дефинираме, за да предприемем конкретни действия въз основа на стойностите, които съществуват в нашите програми или са предадени от потребителя, използвайки позиционен параметри.