Баш детално услови

„Што ако?“ Тоа е основното прашање за секој развој. Што ако корисникот кликне на полето? Што ако a има вредност помеѓу 4 и 10? Што ако датотеката XY постои? Што ако стрингот 1 се појави во низата 2? И што ако беше интуитивно разбирливо каде лежат разликите помеѓу [[]], [], (()) и тест?

исто така

Условите најпрво вдахнуваат живот во скрипти - без нив тие можат да ги прават само наједноставните задачи, а јамките ќе траат вечно. За жал, условите во баш не се особено привлечни за почетници.

Дури и целосен почетник веднаш ќе разбере барање Ако, синтаксата Ако-тогаш-друго е прилично самообјаснувачка (повеќе за јамките и прашањата во Баш). Но, конзолата се конструира во пребарувањата? Квадратни или кружни загради, наводници или не - или можеби воопшто нема заграда?

Првиот услов на кој наидувате е веројатно нешто како „[$ i -eq 5]“ во прашањето ако:

Уште еднаш треба да се каже дека едноставниот знак за еднаквост се користи само за споредување на жиците; нумеричките вредности и другите се споредуваат со ==. И во ова едноставно стандардно пребарување, има уште три интересни откритија: Од една страна, „ако“ не е потребно тука воопшто, од друга страна, заградите не се исто така - просторите по/пред заградите, од друга страна, ги прават веднаш штом се користат . Вие исто така може да напишете:

Квадратните загради не се ништо повеќе од различен начин на пишување на алатката „тест“. Тие едноставно ги прават посложените услови појасни и полесни за пишување. И бидејќи командата по „&&“ се извршува само ако претходната команда извести за успех, „ехо“ започнува тука само во примерот кога „var“ е всушност „Здраво“.

Двојните загради, од друга страна, се сопствена имплементација на Баш што се справува со некои работи подобро или поинаку. Ако ги погледнете разликите помеѓу двете, врз основа на специфични примери, имате убава заедничка нишка за пристап дури до условните услови.

По споредбата, во игра влегуваат двојните кружни загради. Тие во голема мера одговараат на командата „нека“, која ги проценува аритметичките операции.

Услови со [и [[

Тест, [и [[нудат три различни режими на споредување: жици, броеви и датотеки. Како и во примерот погоре, жиците едноставно се споредуваат со "=" и "! =" (Нееднакви или нееднакви), така:

Дури и првиот услов не работи повеќе ако текстот во „$ a“ содржи празни места, на пример, низата „Здраво свет“. Тогаш ви требаат наводници - или двојни загради:

Тест варијантата се однесува како и обично и ги дели несутираните варијабли, варијантата Баш се откажува од ова. Ова ублажува типичен извор на грешка. Сепак, треба повеќе да ...

користете, затоа ставете го RHS (Десна страна) во наводници. Бидејќи [[го совладува глобирањето на школка и разбира сè што е десно од операторот, што не е во наводници како глоб. Тоа значи: Благодарение на оваа одлика, можете, на пример, брзо да проверите дали содржината на променливата одговара на една од низите „foobar_1“, „foobar_2“ или „foobar_3“:

Ова е одлична функција, но предизвикува проблеми доколку содржината на променливата е низа со квадратни загради како што е „[фообар]“. Без наводници, решената променлива ќе резултира во следната изјава:

Изгледа како што треба, но RHS се гледа како топче, да речеме „ѓ или о или б. „, И LHS како низа. Значи, генерално е подобро:

Моќната карактеристика го прави [[конечно супериорен: Користење на операторот “=

"Може да се спореди со редовен израз, тука на пример:

^ [[: цифра:]] _ foobar]] && ехо Точно

Изразот десно од знакот за еднакво се толкува како POSIX основен RegEx, така што „$ a“ треба да започне со 1 до 5 цифри и да заврши со „_foobar“.

Следните разлики помеѓу [и [[веќе не се однесуваат (само)] на низите, туку на комбинациите и датотеките.

Проширување и комбинации на датотеки

Покрај низата оператори, и двете алатки нудат секакви опции за тестирање на ниво на датотека, на пример дали датотека постои (-e), две датотеки се идентични (-ef), датотека постои и директориум е (-d) и така натаму . Човечката страница [https://man.cx/test] дава целосен преглед.

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

Двете варијанти завршуваат со лажна - што се случило? [се проширува на сите имиња на датотеки во директориумот со sterвездичка, така што во овој пример добива два аргументи. Но, бидејќи се очекува само една работа, изјавата е невистинита. Би било вистина само ако во директориумот има точно една датотека со продолжение „.txt“. [[не успее од сосема друга причина: Името на датотеката не е проширено - следствено, датотеката наречена "* .txt" се бара тука.

Меѓутоа, ако сакате да знаете дали постои барем една датотека .txt, можете да ја побарате преку grep и ls и потоа да проверите дали низата не е празна (-n):

Големата конечна разлика сега се однесува на комбинациите. [[Варијантата овде едноставно се потпира на нешто почеста нотација на AND и OR:

Значи, тука „$ a“ мора да содржи текст „Здраво“ И „$ b“ мора да биде „свет“ ИЛИ „шума“. Затоа, командната тест користи „-а“ и „-о“, [[но „&&“ и „||“. Сепак, ова е само прашање на стил без никакво понатамошно влијание.

Аритметички операции

Дури и при проценка на аритметичките операции, [[е супериорен во однос на командата за тестирање. И во двата случаи, споредбите едноставно се прават со употреба на кратенка: „-eq“ за „еднакво“, „-lt“ за „помалку од“, „-ge“ за „поголемо или еднакво“ и така натаму. Сепак, можете да пресметате и во загради со двојни квадратни!

Повозбудливата варијанта е очигледно специјалист овде, т.е. двојната заграда. Од една страна е поубавата синтакса со попознатите оператори:

Во прилог на толку разбирлив помалку од или еднаков оператор, конструкцијата на заградата може да манипулира и со нешто сосема друго, имено со променливите во C-стил; често се користи за зголемување на броењето на променливите:

Двете јамки произведуваат ист резултат; во варијантата while, употребата, освен некоја состојба, станува малку појасна.

Земе

Во суштина, условите се релативно едноставни и едноставни, има само неколку аспекти што треба да се земат предвид: Општо, можете самоуверено да се навикнете на двојните квадратни загради и да ја користите командната тест ако ви треба автоматско продолжување на името на датотеката

Со [[повторно, секогаш треба да запомните дека RHS се третира како топче без наводници. И со аритметички проценки или операции, најдобро е да се навикнеш на двојните кружни загради: Тогаш никогаш не треба да размислуваш од [[до ((, препознај ги аритметичките споредби веднаш според типот на загради) и исто така може полесно да пресметуваш со нив.

Туторијал за Пајтон, дел 7

Рекурзии и редовни изрази

Излез со додека, до и за

Спроведување на јамки во баш

Оваа веб-страница е заштитен знак на Групата за комуникации Вогел. Преглед на сите производи и услуги можете да најдете на www.vogel.de

StartupStockPhotos; Тројка; Шарлот Конибир