Водич за почетнике БАСХ - Услови и променљиве

Увод

Добродошли у трећи део "Водич за почетнике БАСХ". Ако сте пропустили претходна два чланка, вероватно ћете желети знати шта чини овај водич другачији од других БАСХ скриптних водича.

Овај водич пише комплетан новинар БАСХ-у, и као читатељ који научите док научим. Иако сам почетник БАСХ-а, долазим из основе развоја софтвера, иако је већина ствари које сам написао за Виндовс платформу.

Прве две водиче можете видети тако што ћете посетити:

Ако сте нови у БАСХ скрипти, препоручујем да прочитате прва два водича пре него што наставите са овим.

У овом водичу ћу нагласити како користити условне изјаве за тестирање корисничког уноса и контролу начина функционисања скрипте.

Инсталирај рсстаил

Да бисте пратили овај водич, потребно је да инсталирате апликацију командне линије зване рсстаил која се користи за читање РСС феедова .

Ако користите Дебиан / Убунту / Минт типа дистрибуције следеће:

судо апт-гет инсталл рсстаил

За Федора / ЦентОС итд. Укуцајте следеће:

иум инсталирати рстстаил

За опенСУСЕ откуцајте следеће:

зиппер инсталл рсстаил

ИФ изјава

Отворите терминал и креирајте датотеку под називом рссгет.сх тако што ћете унети следеће:

судо нано рссгет.сх

Унутар нано уредника унесите следећи текст:

#! / бин / басх
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;

Сачувајте датотеку притиском на ЦТРЛ и О, а затим изађите притиском на ЦТРЛ и Кс.

Покрените скрипту тако што ћете унети следеће:

сх рссгет.сх

Скрипта ће вратити листу наслова из линук.абоут.цом РСС фееда.

То није претерано корисна скрипта, јер она једноставно преузима наслове из једног РСС феед-а, али не штеди путању Линук.абоут.цом РСС феед-у.

Поново отворите рссгет.сх скрипту у нано-у и уредите датотеку како бисте изгледали на следећи начин:

#! / бин / басх

ако [$ 1 = "вербосе"]
онда
рсстаил -д -л -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи

Поново покрените скрипту тако што ћете унети следеће:

сх рссгет.сх вербосе

Овај пут РСС феед се враћа са насловом, линком и описом.

Хајде да анализирамо сценарио детаљно:

#! / Бин / басх се појављује у сваком сценарију коју пишемо. Следећа линија у основи гледа на први улазни параметар који корисник пружа и упоређује га са речима "вербосе". Ако улазни параметар и реч "вербосе" одговарају линијама између тада и фи .

Наведени сценарио је очигледно мањак. Шта се догађа ако уопште не обезбедите улазни параметар? Одговор је да добијете грешку у редовима неочекиваних оператора.

Друга велика грешка је у томе што ако не наведете реч "вербосе", ништа се уопште не дешава. Идеално ако не наведете реч вербосе, скрипта ће вратити листу наслова.

Поново користите нано да бисте уредили рссгет.сх датотеку и променили код на следећи начин:

#! / бин / басх

ако [$ 1 = "вербосе"]
онда
рсстаил -д -л -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
друго
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи

Сачувајте датотеку и покрените је тако што ћете унети следеће:

сх рссгет.сх вербосе

Појавиће се листа наслова, описи и веза. Сада поново покрените на следећи начин:

сх рссгет.сх наслова

Овога пута се појављује листа наслова.

Додатни део скрипте је на линији 4 и представља други израз. У основи скрипта сада каже да ли је први параметар ријеч "вербосе" добити опис, везе и наслове за РСС феед, али ако је први параметар нешто друго, само добијете листу наслова.

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

Пре него што покушамо да разјаснимо ове проблеме, желим вам показати још једну наредбу која иде са ИФ изразом.

Измените своју рссгет.сх скрипту како бисте изгледали на следећи начин:

#! / бин / басх

ако [$ 1 = "сви"]
онда
рсстаил -д -л -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
елиф [$ 1 = "опис"]
онда
рсстаил -д -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;

друго
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи

Одлучио сам да се ријешим ријечи и замијеним са свим. То није важан део. Горњи сценарио уводи елиф који је кратак начин речи ЕЛСЕ ИФ.

Сада сценарио ради на следећи начин. Ако покренете сх рссгет.сх све тада добијате описе, линкове и наслове. Ако уместо тога покренете сх рссгет.сх опис, добићете само наслове и описе. Ако доставите било коју другу реч, добићете листу наслова.

Ово уводи начин брзог изласка са списком условних изјава. Алтернативни начин рада ЕЛИФ-а је коришћење онога што је познато као угнежене изјаве ИФ.

Следећи је пример који показује како функционишу уграђене ИФ изразе:

#! / бин / басх

ако [$ 2 = "абоутдотцом"]
онда
ако [$ 1 = "сви"]
онда
рсстаил -д -л -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
елиф [$ 1 = "опис"]
онда
рсстаил -д -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;

друго
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи
друго
ако [$ 1 = "сви"]
онда
рсстаил -д -л -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
елиф [$ 1 = "опис"]
онда
рсстаил -д -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
друго
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи
фи

Слободно укуцајте све то ако желите или копирајте и залепите је у вашу рссгет.сх датотеку.

Горњи сценарио представља други параметар који вам омогућава да изаберете или "абоут.цом" или "лкер.цом" РСС феед.

Да бисте је покренули, уносите следеће:

сх рссгет.сх алл абоутдотцом

или

сх рссгет.сх све лкер

Наравно, можете све заменити са описима или насловима да бисте добили само описе или само наслове.

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

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

Замислите да желите да додате још један РСС феед као што су Свакодневни Линук Корисник или Линук данас? Сценариј би постао огроман и ако сте одлучили да желите да се унутрашња изјава ИФ промени, морате га промијенити на више места.

Иако постоји неко време и место за гнездо, ако их треба употребљавати поштено. Обично постоји начин да се ваш код понови, тако да вам уопште није потребан гнездени ИФ. Доћи ћу на ову тему у будућем чланку.

Хајде сада погледати исправљање проблема људи који улазе у дуфф параметре. На пример, у горе наведеном скрипту ако корисник унесе нешто друго осим "абоутдотцом" као други параметар онда се листа чланака појави из РСС феед-а из ЛКСЕР-а без обзира да ли корисник унесе лкер или не.

Поред тога, ако корисник не унесе "све" или "опис" као први параметар онда је подразумевана листа наслова који могу или не бити оно што корисник намерава.

Погледајте следећу скрипту (или копирајте и залепите је у вашу датотеку рссгет.сх.

#! / бин / басх

ако [$ 2 = "абоутдотцом"] || [$ 2 = "лкер"]
онда
ако [$ 1 = "сви"] || [$ 1 = "опис"] || [$ 1 = "наслов"]
онда
ако [$ 2 = "абоутдотцом"]
онда

ако [$ 1 = "сви"]
онда
рсстаил -д -л -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
елиф [$ 1 = "опис"]
онда
рсстаил -д -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;

друго
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи
друго
ако [$ 1 = "сви"]
онда
рсстаил -д -л -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
елиф [$ 1 = "опис"]
онда
рсстаил -д -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
друго
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи
фи
фи
фи

Прва ствар коју треба приметити је да се сценарио сада постаје прилично велик и да брзо можете да видите како из контролних угнежених ставова ИФ могу постати.

Бита која је важна у овој скрипти је ИФ изјава || изјава ТХЕН секција на линији 2 и линији 4.

Тхе || означава ОР. Дакле, линија ако [$ 2 = "абоутдотцом"] || [$ 2 = "лкер"] проверава да ли је 2. параметар једнак "абоутдотцом" или "лкер". Ако није, тада ИФ изјава је завршена јер не постоји други израз за вањско већину ИФ.

Слично на линији 4 линија ако [$ 1 = "сви"] || [$ 1 = "опис"] || [$ 1 = "титле"] проверава да ли је први параметар једнак или "све" или "опис" или "наслов".

Сада, ако корисник покреће сх рссгет.сх сир кромпира, ништа се не враћа, пре него што би добили листу наслова из ЛКСЕР-а.

Насупрот || је &&. Оператор && означава АНД.

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

#! / бин / басх

ако [$ # -ек2]
онда

ако [$ 2 = "абоутдотцом"] || [$ 2 = "лкер"]
онда
ако [$ 1 = "сви"] || [$ 1 = "опис"] || [$ 1 = "наслов"]
онда
ако [$ 2 = "абоутдотцом"]
онда

ако [$ 1 = "сви"]
онда
рсстаил -д -л -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
елиф [$ 1 = "опис"]
онда
рсстаил -д -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;

друго
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи
друго
ако [$ 1 = "сви"]
онда
рсстаил -д -л -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
елиф [$ 1 = "опис"]
онда
рсстаил -д -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
друго
рсстаил -у хттп://з.абоут.цом/6/о/м/линук_п2.кмл;
фи
фи
фи
фи
фи

Једини бит који је додатак у том скрипту је још једна спољна ИФ изјава на следећи начин: ако [$ # -ек 2] . Ако прочитате чланак о улазним параметрима, знаћете да $ # враћа број од броја улазних параметара. -ек означава једнаке. ИФ изјава стога провјерава да ли је корисник унео 2 параметра и ако нису успели да изађу без учинка било чега. (Не посебно пријатељски).

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

Последња задња команда коју морате научити о условним изјавама је изјава ЦАСЕ.

#! / бин / басх


ако [$ # -ек2]
онда
случај $ 2 ин
абоутдотцом)
случај $ 1 ин
све)
рсстаил -д -л -у з.абоут.цом/6/о/м/линук_п2.кмл
;;
Опис)
рсстаил -д -у з.абоут.цом/6/о/м/линук_п2.кмл
;;
наслов)
рсстаил -у з.абоут.цом/6/о/м/линук.абоут.цом/6/о/м/линук_п2.кмл
;;
есац
;;
лкер)
случај $ 1 ин
све)
рсстаил -д -л -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
;;
Опис)
рсстаил -д -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
;;
наслов)
рсстаил -у хттп://лкер.цом/модуле/невсвире/хеадлинес.рсс
;;
есац
;;
есац
фи

Изјава случаја је лепши начин писања ИФ ЕЛСЕ ИФ ЕЛСЕ ИФ ЕЛСЕ ИФ.

На пример ова логика

ИФ воће = банане
ТХЕН тхис
ЕЛСЕ ИФ фруит = поморанџе
ТХЕН тхис
ЕЛСЕ ИФ фруит = гроздје
ТХЕН тхис
ЕНД ИФ

може се преписати као:

случај воће у
банане)
урадите
;;
наранџе)
урадите
;;
грожђе)
урадите
;;
есац

У основи, прва ствар после случаја је ствар коју ћете упоређивати (тј. Воће). Тада је свака ставка пред загради оно што упоређујете и ако се то поклапа са линијама које претходи ;; ће се покренути. Изјава случаја се прекида са обрнутим есацом (што је случај уназад).

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

За стварно побољшање сценарија морам да вас упознам са варијаблама.

Погледајте следећи код:

#! / бин / басх

лкер = "лкер.цом/модуле/невсвире/хеадлинес.рсс"
абоутдотцом = "з.абоут.цом/6/о/м/линук_п2.кмл"
дисплаи = ""
урл = ""

ако [$ # -лт 2] || [$ # -гт 2]
онда
ецхо "употреба: рссгет.сх [алл | десцриптион | титле] [абоутдотцом | лкер]";
излаз;
фи

случај $ 1 ин
све)
дисплаи = "- д -л -у"
;;
Опис)
дисплаи = "- д -у"
;;
наслов)
дисплаи = "- у"
;;
есац

случај $ 2 ин
абоутдотцом)
урл = $ абоутдотцом;
;;
лкер)
урл = $ лкер;
;;
есац
рсстаил $ прикажи $ урл;

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

лкер = "лкер.цом/модуле/невсвире/хеадлинес.рсс"
абоутдотцом = "з.абоут.цом/6/о/м/линук_п2.кмл"
дисплаи = ""
урл = ""

Скрипта се одмах може управљати кориштењем варијабли. На пример, сваки параметар се обрађује одвојено, тако да нема угнежених ставова ИФ.

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

Команда рсстаил сада мора само да користи вредност екрана и урл-а како би исправно радила.

Док се варијабле постављају само им дају име, да их заправо користе, морате поставити знак $ пред њима. Другим речима варијабла = вриједност поставља варијаблу на вриједност док $ варијабла значи дати ми садржај варијабле.

Следећи је последњи сценарио за овај туторијал.

#! / бин / басх

лкер = "лкер.цом/модуле/невсвире/хеадлинес.рсс"
абоутдотцом = "з.абоут.цом/6/о/м/линук_п2.кмл"
еверидаилинукусер = "хттп://феедс.феедбурнер.цом/еверидаилинукусер/ВЛлг"
линуктодаи = "хттп://феедпроки.гоогле.цом/линукктодаи/линук"
усаге = "употреба: рссгет.сх [алл | десцриптион | титле] [лкер | абоутдотцом | еверидаилинукусер | линуктодаи]"
дисплаи = ""
урл = ""

ако [$ # -лт 2] || [$ # -гт 2]
онда
ецхо $ употреба;
излаз;
фи

случај $ 1 ин
све)
дисплаи = "- д -л -у"
;;
Опис)
дисплаи = "- д -у"
;;
наслов)
дисплаи = "- у"
;;
*)
ецхо $ употреба;
излаз;
;;
есац

случај $ 2 ин
абоутдотцом)
урл = $ абоутдотцом;
;;
лкер)
урл = $ лкер;
;;
линуктодаи)
урл = $ линуктодаи;
;;
еверидаилинукусер)
урл = $ еверидаилинукусер;
;;
*)
ецхо $ употреба;
излаз;
есац

рсстаил $ прикажи $ урл;

Наведени скрипт уводи више РСС феедова и постоји варијабла која корисницима говори како се користи скрипта ако не унесу 2 варијабле или унесу нетачне опције за варијабле.

Резиме

Ово је епски чланак и можда је прерано прешао. У следећем водичу ћу вам показати све опције за поређење за ИФ изјаве и још много тога о чему треба да говорим у вези са варијаблама.

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

Погледајте одељак Хов То (скролујте поред категорија за преглед листе чланака) одељака л инук.абоут.цом да бисте пронашли корисније водиче из дуалног покретања Виндовса и Убунту-а за подешавање виртуелне машине помоћу ГНОМЕ кутија .