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

Администратори система Линук и Мац обично су упознати са скриптирањем путем терминала, али то могу чак и корисници Виндовс-а укључите се у акцију са Виндовс подсистемом за Линук.

Како добити Линук Басх Схелл на Виндовс 10

Не требате користити Линук да бисте се пребацили на други рачунар или покренули ВМ? Уместо тога покрените Линук у оперативном систему Виндовс 10 са Басх схелл терминалом!

Како функционишу скрипте за басх

Басх скрипта је једноставно обична текстуална датотека која садржи низ наредби које басх љуска може читати и извршавати. Басх је подразумевана љуска у пре-Цаталина мацОС-у и већини Линук дистрибуција.

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

instagram viewer

Прво створите следећу датотеку на прикладном месту (идеално је да отворите терминал и прво одете до жељеног директоријума):

#! / бин / басх
ецхо "Хелло, Ворлд"

Прва линија говори шта год да покреће овај програм како да га покрене (тј. Помоћу басх тумача). Друга је само наредба попут било које друге коју можете унети у командну линију. Сачувајте ту датотеку као хелло_ворлд.сх, онда:

$ цхмод + к хелло_ворлд.сх
$ ./хелло_ворлд.сх

Тхе цхмод наредба у првом реду чини датотеку извршном, што значи да се може покренути уношењем њеног имена, као у другом реду.

Ако видите да се речи „Здраво, свет“ појављују одштампане на линији на вашем терминалу, онда све функционише по потреби.

Како функционишу петље

У општем програмирању, постоје две главне врсте фор петље: нумерички и за сваки. Нумерички тип је традиционално најчешћи, али у басх употреби је обично обрнуто.

Нумерички за петље обично се фокусирају на један цео број који одређује колико ће се итерација извршити, на пример:

за (и = 0; и <100; и ++) {
/ * изјаве за вишеструко извршавање * /
}

Ово је петља познатог изгледа која ће се поновити тачно 100 пута, осим ако се ја не променим унутар петље или ако друга наредба заустави извршење петље фор.

За разлику од тога, петље Фореацх имају тенденцију да раде на структурама као што су листе или низови и понављају се за сваку ставку у тој колекцији:

људи = ["Петар", "Павле", "Марија"]
фореацх (људи као особа) {
иф (персон == "Паул") {
...
}
}

Неки језици користе мало другачију синтаксу која замењује редослед прикупљања и ставке:

људи = ["Петар", "Павле", "Марија"]
за (особа у људима) {
иф (персон == "Паул") {
...
}
}

Фор ин Лоопс

У басху, фореацх - или јер у- петља је чешћа. Основна синтакса је, једноставно:

за аргумент у [листа]
урадити
/ * изјаве за вишеструко извршавање * /
/ * вредност арг се може добити помоћу $ арг * /
Готово

На пример, за итерацију кроз три датотеке са експлицитним именом:

за датотеку у једном.ц два.ц три.ц
урадити
лс "$ датотека"
Готово

Ако такве датотеке постоје у тренутном директоријуму, излаз из ове скрипте биће:

један.ц
два.ц
три.ц

Уместо фиксног скупа датотека, листа се може добити помоћу глоб обрасца (један који укључује џокер знакове - посебне знакове који представљају друге знакове). У следећем примеру, фор петља се понавља кроз све датотеке (у тренутном директоријуму) чија се имена завршавају на ".кмл":

за датотеку у * .кмл
урадити
лс -л "$ датотека"
Готово

Ево неколико примера резултата:

$ -рв-р - р-- 1 особље бобби 2436 3. новембар 2019 феед.кмл
$ -рв-р - р-- 1 бобби особље 6447 27. октобар 16:24 ситемап.кмл

Ово може изгледати врло дуготрајно:

$ лс -л * .кмл

Али постоји значајна разлика: фор петља извршава лс програм два пута засебно, са једним именом датотеке који му се сваки пут прослеђује. У одвојеном примеру лс, глоб образац (* .кмл) се прво подудара са именима датотека, а затим их све, као појединачне параметре командне линије, шаље на једну инстанцу лс.

Ево примера који користи Тоалет програм (бројање речи) како би разлика била очигледнија:

$ вц -л * .кмл
44 феед.кмл
231 карта сајта.кмл
275 укупно

Тхе Тоалет програм броји број редова у свакој датотеци одвојено, а затим исписује укупан број свих њих. Насупрот томе, ако Тоалет ради у оквиру фор петље:

за датотеку у * .кмл
урадити
вц -л $ датотека
Готово

И даље ћете видети број за сваку датотеку:

44 феед.кмл
231 карта сајта.кмл

Али не постоји укупан збирни збир, јер Тоалет се покреће изоловано, сваки пут када се петља понови.

Када листа није листа

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

за датотеку у једном.ц два.ц

Не свиђа ми се ово:

за датотеку у „оне.ц тво.ц“

Други пример обухвата имена датотека у двоструким наводницима што резултира листом са само једним параметром; петља фор извршиће се само једном. Овај проблем се може избећи коришћењем променљиве у следећим случајевима:

ФИЛЕС = "оне.ц тво.ц"
за датотеку у $ ФИЛЕС
урадити
...
Готово

Имајте на уму да сама декларација променљиве треба да дода вредност у двоструке наводнике!

За без листе

Без ичега за понављање, фор петља ради на било којим аргументима командне линије који су скрипти достављени када је позван. На пример, ако имате скрипту са именом аргс.сх који садржи следеће:

#! / бин / сх
За
урадити
ецхо $ а
Готово

Тада ће вам извршавање аргс.сх дати следеће:

$ ./аргс.сх један два три
један
два
три

Басх препознаје овај случај и лечи за посао као еквивалент за ин $ @ до где је $ @ посебна променљива која представља аргументе наредбеног ретка.

Емулација традиционалног нумеричког за петљу

Басх скрипте се често баве списковима датотека или линијама излаза из других наредби, па је уобичајена петља фор ин. Међутим, и даље је подржана традиционална операција у стилу ц:

за ((и = 1; и <= 5; и ++))
урадити
ецхо $ и
Готово

Ово је класична форма са три дела у којима:

  1. променљива се иницијализује (и = 1) када се петља први пут сретне
  2. петља се наставља све док је услов (и <= 5) тачан
  3. сваки пут око петље, променљива се увећава (и ++)

Итерација између две вредности је довољно уобичајен захтев да постоји краћа, мало мање збуњујућа алтернатива:

за ја у {1..5}
урадити
ецхо $ и
Готово

Експанзија заграде која се одвија ефикасно преводи горе поменуту петљу фор у:

за и у 1 2 3 4

Финија контрола петље са прекидом и наставком

Сложенији за петље често треба начин раног изласка или одмах поновно покретање главне петље са следећом вредношћу заузврат. Да би то учинио, басх позајмљује бреак и цонтинуе изразе који су уобичајени у другим програмским језицима. Ево примера који користи оба за проналажење прве датотеке која има више од 100 знакова:

#! / бин / басх
за датотеку у *
урадити
ако [! -ф "$ датотека"]
онда
ецхо "$ датотека није датотека"
Настави
фи
нум_цхарс = $ (вц -ц ецхо $ датотека је "$ нум_цхарс карактера"
ако [$ нум_цхарс -гт 100]
онда
ецхо "Пронађена датотека $"
пауза
фи
Готово

Петља фор овде ради на свим датотекама у тренутном директоријуму. Ако датотека није уобичајена датотека (нпр. Ако је директоријум), наредба цонтинуе се користи за поновно покретање петље са следећом датотеком заузврат. Ако је то уобичајена датотека, други условни блок ће одредити да ли садржи више од 100 знакова. Ако је то случај, изјава бреак користи се за тренутно напуштање петље фор (и достизање краја скрипте).

Закључак

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

Емаил
Ознаке приватности Аппле-ових апликација можда неће бити потпуно тачне

Извештај сугерише да Аппле-ове ознаке приватности апликација могу имати неких проблема.

Повезане теме
  • Програмирање
  • Линук
О аутору
Бобби Јацк (Објављено 19 чланака)

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

Још од Бобби Јацк-а

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, прегледе, бесплатне е-књиге и ексклузивне понуде!

Још један корак…!

Молимо потврдите своју адресу е-поште у е-поруци коју смо вам управо послали.

.