Басх 'Фор' петља: Упутство и примери

Басх (Боурне Агаин Схелл) је командна линија љуске и језик скрипти у ГНУ/Линук оперативним системима. То је подразумевана љуска за већину Линук дистрибуција.

Као и већина скриптних језика, Басх обезбеђује синтаксу петље за понављање сличних задатака више пута. У овом чланку ћемо научити како да користимо за петља у Басху.

Увод

Типична Басх скрипта садржи низ команди које се извршавају једна за другом. Променљиве се могу користити за чување стрингова, вредности целобројних индекса, резултата команде, итд. Петље су потребне када корисник жели да изврши одређену команду више пута. Од посебне је користи када је излаз једне команде у облику листе, а на сваком резултату, на листи, треба да се покрене друга команда.

Општа синтакса

Општа синтакса за за петља у Басху је:

за ин до ... ... урађено

Ево, је Басх променљива, која мора да буде важеће име променљиве Линук шкољке, тј. име садржи комбинацију слова (аз, АЗ), бројева (0-9) и доње црте ( _ ) и мора да почиње словом или доња црта.

Тхе је или прилагођени опсег целих индекса који ће бити у петљи или прилагођена листа целих бројева или стрингова. Такође може садржати другу Линук команду, међутим, излаз такве команде мора бити раздвојен размацима или знаковима новог реда, тј. да се може анализирати помоћу Басх-а у листу (Листа у Басх-у је у основи колекција вредности одвојених размаком или новим редом ).

Која год наредба(е) треба да се изврши, мора бити смештена унутар учинити..готово блокирати.

Хајде да видимо неколико једноставних примера.

Петља на опсегу вредности Интегер: Следећи код креира директоријуме под називом дир1, дир2, дир3 до дир10.

фор и ин {1..10} уради мкдир дир$и доне

Петљање на листи фиксних вредности: Следећи код штампа сваки стринг или цео број у датој фиксној листи.

фор и ин Хелло 1 2 3 Ћао! до ецхо $и доне

Петља на излазу команде: Следећи код петље преко излаза лс и штампа назив сваке датотеке у датом формату.

фор и у `лс` до ецхо "Име датотеке је $и" готово

Синтакса заснована на изразу

Синтакса заснована на изразима слична програмском језику Ц такође је могућа у Басху:

за ((Израз 1; Израз 2; Израз 3)) уради ... ... урађено

овде, Израз 1 је иницијализација променљиве(а) индекса. Израз 2 је услов када се мора изаћи из петље; овај услов се проверава у свакој итерацији. Израз 3 специфицира повећање/смањење/измену вредности индексне променљиве(е)

Следећи пример једноставно штампа вредности од 0 до 4:

фор ((и=0;и<5;и++)) до ецхо $и доне

Следећи пример ствара бесконачну петљу, пошто нису наведени изрази:

фор (( ; ; )) до ецхо "Притисните Цтрл-Ц да бисте зауставили" готово

Прекини и настави

Изјава о прекиду за условни излаз

Можемо користити и условни исказ ако унутар петље. Тхе ако изјава се може користити са а пауза изјаву, за условни излаз из петље.

фор ((и=0;и<10;и++)) уради иф [[ $и -ек 5 ]] тхен бреак елсе ецхо $и; фи доне

Горња петља ће штампати бројеве од 0 до 4. Затим када је вредност и 5, она ће избити из петље. Ово је од посебне користи када треба изаћи из петље када команда даје одређени излаз. На пример, следећа петља се прекида ако и када пронађе празну датотеку.

за датотеку у `лс` до флен=`вц -ц $филе` ако [[ "$флен" = "0 $филе" ]] онда ехо "$филе је празан" пауза друго ецхо $флен фи завршено 

Команда вц -ц штампа број редова у датотеци . Штампа га у формату , на пример, 10 тест.ткт. Излазимо из петље када је број линија 0, тј. празна датотека.

Цонтинуе Статемент да бисте условно прескочили итерацију

Слично Ц и многим другим програмским језицима, басх такође има а Настави наредбу, да прескочите преостали део итерације у петљи ако је одређени услов задовољен.

фор ((и=0;и<10;и++)) уради ако [[ $и -ек 5 ]] онда настави фи ецхо $и; Готово

Горња петља ће штампати бројеве од 0 до 10, осим 5, јер током итерације и=5 постоји наредба цонтинуе, која ће прескочити остатак кода у петљи на почетку са итерацијом и=6.

У следећем примеру, штампамо број редова у датотеци, а одређена итерација ће Настави ако је то директоријум а не датотека.

за датотеку у `лс` уради иф [[ -д $филе ]] затим настави фи вц -ц "$филе" урађено

[[ -д $филе ]] проверава да ли је датотека директоријум. Ако јесте, онда прелазимо на следећу датотеку, односно следећу итерацију. Ако то није директоријум, штампамо број редова у датотеци помоћу Тоалет команду, као што је приказано и раније.

Коришћење петљи: скрипте и командна линија

Синтакса петље се може користити у Басх љусци директно или из датотеке скрипте љуске. Једном за синтакса петље је унета у љуску, љуска наставља са промптом да би кориснику дозволио да настави команде које треба да се петљају.

У супротном, корисник може ово да сачува у датотеци скрипте и изврши датотеку скрипте.

Тхе #!/бин/басх на почетку одређује интерпретер који ће се користити када се датотека изврши. Иако је Басх најчешће коришћена шкољка данас, неки корисници више воле шкољке попут зсх, који треба да буде наведен уместо басх на почетку ове датотеке.

Да бисте дали дозволе за извршење за ову датотеку, покрените:

цхмод +к тест.сх

коначно, да извршите датотеку, трцати:

./тест.сх

Закључак

Тхе за петља у Басх-у је прилично једноставна карактеристика, али се користи у скоро свим врстама сложених сценарија скриптовања. Учење о томе иде дуг пут без обзира да ли сте обичан или напредан корисник Линук-а или почињете да учите аутоматизацију за задатке системске администрације и ДевОпс-а.