Използване на цикъл „до“ в Bash скрипт за превъртане на команда(и).
Bash (Bourne Again Shell) е команден ред и скриптов език в GNU/Linux операционни системи. Това е обвивката по подразбиране за повечето дистрибуции на Linux.
Подобно на повечето скриптови езици, Bash предоставя синтаксис на цикъл за повтаряне на подобни задачи няколко пъти. В тази статия ще научим как да използваме до
цикъл в Bash.
Въведение
В до
цикълът в Bash се използва за изпълнение на команда(и) (изпълнени команди) няколко пъти въз основа на изхода на друга команда(и) (команди за условия). Изпълнените команди ще продължат да се изпълняват, докато командата за условие продължава да се проваля (т.е. връща ненулев статус. Всяка команда в Linux връща 0 за успех и ненулево цяло число за неуспех). Това е точно обратното на докато
цикъл, в който изпълнените команди продължават да работят, докато командата за условие е успешна.
Ако има множество команди за условия, операторът разглежда само състоянието на последната команда в списъка, т.е. цикълът ще се изпълнява, докато последната команда в списъка продължи да се проваля.
Общ синтаксис
Общият синтаксис за до
цикълът в Bash е:
докато не направите
Списъкът с команди за изпълнение ще работи, докато последната команда в списъка с команди за условие не успее. След като последната команда е успешна, цикълът излиза.
Потребителите могат да посочат всеки изпълним файл в списъците с команди. Това могат да бъдат стандартни програми за Linux или потребителски програми или скриптове. Всяка команда трябва да бъде или на нов ред, или разделена с точка и запетая на същия ред.
Нека видим няколко примера.
Цикъл, докато променлива има определена стойност: Следващият цикъл се изпълнява до стойността на променливата х
е 10.
x=0 докато [[ $x -eq 10 ]] не echo $x ((x++)) готово
Във всяка итерация проверяваме дали стойността на x е 10. Стойността се проверява с помощта на тест
команда. [[ Израз ]]
е синтаксисът на тестовата команда (вж мъж тест
).
След това вътре в направи... готово
блок, ние просто отпечатваме стойността на x и я увеличаваме. Цикълът излиза, след като командата за условие е успешна, т.е. кога $x
е равно на 10
.
Забележка: Индексната променлива, която ще се използва в цикъла „until“, трябва да бъде инициализирана или преди цикъла „until“, или в командите за условие, за разлика от цикъла for, който позволява неявно инициализиране на променлива.
С множество команди за условия: Следващият цикъл създава 5 директории с име dir0, dir1, ... dir4
.
z=0 докато echo "Здравей" echo "Чао" [[ $z -eq 5 ]] do echo "Създаване на dir$z..." mkdir dir$z ((z++)) готово
Първите команди echo “Hi” и echo “Bye” ще се изпълнят веднъж напълно; техният успех или неуспех няма никакво влияние върху това колко дълго ще продължи цикълът.
Тогава ще се изпълни тестовата команда за проверка на стойността на променлива z. Докато тази команда продължава да се проваля, т.е. докато стойността на z е 5, командите за условия и изпълнените команди продължават да се изпълняват в ред. Тук, за всяка итерация, първо ще изпълни 2-те команди за ехо в състояние и след това 3-то условие команда проверява за стойността на z. Ако не е 5, той влиза в цикъла и изпълнява дадените команди.
Прекъснете и продължете
Изявление за прекъсване за условно излизане
Можем да използваме и условното изявление ако
вътре в цикъла. В ако
изявлението може да се използва с a прекъсване
оператор за условно излизане от цикъла.
x=0 докато [[ $x -eq 10 ]] направи, ако [[ $x -eq 5 ]] прекъсва fi echo $x ((x++)) готово
Горният цикъл до ще отпечата числа от 0 до 4. След това, когато стойността на i е 5, той ще излезе от цикъла. Това е особено полезно, когато трябва да излезете от цикъл, когато команда дава конкретен изход.
Инструкция Continue за пропускане на итерация условно
Bash също има a продължи
оператор за пропускане на останалата част от итерация в цикъл, ако определено условие е изпълнено.
x=0 докато [[ $x -eq 10 ]] направи, ако [[ $x -eq 5 ]] продължи fi echo $x ((x++)) готово
Горният цикъл ще отпечата числа от 0 до 10, с изключение на 5, тъй като по време на итерацията на х=5
има оператор за продължаване, който ще пропусне останалата част от кода в цикъла в началото с итерацията на х=6
.
Използване на цикли: скриптове и команден ред
Синтаксисите на цикъла могат да се използват в Bash shell директно или от изпълним файл на скрипт. Подобен на за
и докато
цикли, веднъж an до
синтаксисът на цикъла се въвежда в обвивката, черупката продължава подканата, за да позволи на потребителя да продължи командите, които трябва да бъдат зациклени.
В противен случай потребителят може да запише това в скриптов файл и да изпълни скрипт файла.
В #!/bin/bash
в началото определя интерпретатора, който да се използва, когато файлът се изпълнява. Въпреки че Bash е най-често използваната обвивка в днешно време, някои потребители предпочитат черупки като zsh
, който трябва да бъде посочен на мястото на bash в началото на този файл.
За да дадете разрешения за изпълнение за този файл изпълнете:
chmod +x test.sh
накрая, за да изпълните файла, стартирайте:
./test.sh
Заключение
В до
цикълът е друга важна характеристика в Bash скриптовете. Той има особено значение в сложните скриптове, когато се очаква определен набор от програми да върне състоянието на неуспех и някои други команди трябва да бъдат изпълнени, за да регистрират грешката, да изведат грешката в детайли или просто да изпълнят някои алтернативни програми.