Бастауышқа арналған нұсқаулық - Шарттар мен айнымалылар

Кіріспе

«Бастауышқа арналған нұсқаулықтың» үшінші бөлігіне қош келдіңіз. Алдыңғы екі мақаланы жіберіп алмасаңыз, онда сіз бұл нұсқаулықты басқа BASH сценарий бағыттаушыларынан өзгеше ететінін білгіңіз келуі мүмкін.

Бұл нұсқаулық BASH-ға толық дайындықпен жазылған және оқыған кезде оқитын оқушы ретінде жазылған. Мен BASH-ға жаңадан шыққан кезімде бағдарламалық жасақтаманы дамытудан келіп отырмын, бірақ мен жазған материалдардың көбісі Windows платформасына арналған.

Алғашқы екі нұсқаулықты көре аласыз:

Егер сіз BASH сценарийі үшін жаңа болып табылсаңыз, мен осы екі жалғастырудан бұрын алғашқы екі нұсқаулықты оқып шығуды ұсынамын.

Бұл нұсқаулықта пайдаланушы кірісін тексеру үшін және сценарий функцияларын басқару үшін шартты мәлімдемелерді қалай пайдалану керектігін ерекше атап өткім келеді.

Rsstail орнатыңыз

Бұл нұсқаулықты орындау үшін RSS арналарын оқу үшін пайдаланылатын rsstail деп аталатын пәрмен жолы қосымшасын орнату қажет.

Егер сіз Debian / Ubuntu / Mint негізіндегі таратылым түрін пайдалансаңыз:

sudo apt-get орнату rsstail

Fedora / CentOS және т.б. үшін мыналарды енгізіңіз:

yum орнату rsstail

OpenSUSE үшін мыналарды теріңіз:

zypper орнату rsstail

IF ережесі

Терминал ашып, rssget.sh деп аталатын файлды жасаңыз:

sudo nano rssget.sh

Нано редакторы ішінде келесі мәтінді енгізіңіз:

#! / bin / bash
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;

CTRL және O пернелерін басып, файлды сақтап, одан кейін CTRL және X пернелерін басу арқылы шығыңыз.

Төмендегілерді теру арқылы сценарийді іске қосыңыз:

sh rssget.sh

Сценарий linux.about.com RSS арнасынан тақырыптар тізімін қайтарады.

Бұл өте пайдалы сценарий емес, себебі ол тек бір RSS арнасынан тақырыптарды шығарады, бірақ Linux.about.com RSS арнасына жолды есте сақтау керек.

Rssget.sh сценарийін қайтадан нанода ашыңыз және файлды төмендегідей етіп өңдеңіз:

#! / bin / bash

егер [$ 1 = «verbose»]
содан кейін
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Төмендегілерді теру арқылы сценарийді қайта іске қосыңыз:

sh rssget.sh verbose

Бұл жолы RSS арнасы тақырыбы, сілтемесі және сипаттамасы арқылы қайтарылады.

Сценарийді егжей-тегжейлі қарастырайық:

Біз жазған сценарийде #! / Bin / bash пайда болады. Келесі жол негізінен пайдаланушы ұсынған бірінші кіріс параметріне қарап, оны «verbose» сөзімен салыстырады. Егер кіріс параметрі мен «verbose» сөзі арасындағы жолдар сәйкес келсе және fi іске қосылса.

Жоғарыда келтірілген сценарий анық емес. Енгізу параметрін мүлде қамтамасыз етпеген жағдайда не болады? Жауап - сіз күтпеген оператордың желілері бойынша қателесеңіз.

Басқа негізгі кемшілік болса, егер сіз «вербоз» сөзін бермесеңіз, ештеңе болмайды. Ең дұрысы, сіз сөзді сөзбен қамтамасыз етпесеңіз, сценарий атаулардың тізімін қайтарады.

Rssget.sh файлын өңдеу үшін nano-ны қайтадан қолданыңыз және кодты төмендегідей өзгертіңіз:

#! / bin / bash

егер [$ 1 = «verbose»]
содан кейін
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
басқа
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Файлды сақтаңыз және келесі әрекеттерді орындау арқылы іске қосыңыз:

sh rssget.sh verbose

Атаулары, сипаттамалары және сілтемелер тізімі пайда болады. Енді оны қайтадан іске қосыңыз:

sh rssget.sh тақырыптары

Бұл жолы тек тақырыптардың тізімі көрсетіледі.

Сценарийдің қосымша бөлігі 4-жолда және else сөзін енгізеді. Негізінде, сценарий қазір бірінші параметрдің «дерекқор» сөзі болса, RSS арнасының сипаттамасын, сілтемелерін және атауын алады, бірақ егер бірінші параметр басқа бір нәрсе болса, жай атаулар тізімін алыңыз.

Сценарий сәл жақсарды, бірақ әлі күнге дейін кемшіліктері бар. Параметрді енгізбесеңіз, қате пайда болады. Тіпті егер сіз параметр берсеңіз де, сіз тек тіл атауын ғана білдіргіңіз келмейді деп айтасыз. Мүмкін, сіз жай ғана қателескен дұрыс емеспін, немесе көгершіндерді терген шығарсыз, бұл, сөзсіз, мағынасыз.

Осы мәселелерді шешпес бұрын, мен сіздерге ИФ-ның мәлімдемесіне сәйкес келетін тағы бір пәрменді көрсетгім келеді.

Rssget.sh сценарийін келесідей қарап шығыңыз:

#! / bin / bash

егер [$ 1 = «барлығы»]
содан кейін
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = «сипаттама»]
содан кейін
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

басқа
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi

Мен сөздің сөзінен құтылуға бел будым және оны бәрімен алмастырдым. Бұл маңызды бөлік емес. Жоғарыда келтірілген сценарий ELF IF-ді айтудың қысқа жолы болып табылады.

Енді сценарий келесідей жұмыс істейді. Егер сіз rssget.sh-ді іске қоссаңыз, онда сипаттама, сілтеме және тақырыптар аласыз. Егер орнына sh rssget.sh сипаттамасын орындасаңыз, сіз тек тақырыптар мен сипаттамаларды аласыз. Егер сіз кез-келген басқа сөзді ұсынсаңыз, Сіз атау тізімін аласыз.

Бұл шартты мәлімдемелердің тізімімен тез арада шығу әдісін ұсынады. ELIF жасаудың баламалы тәсілі кірістірілген IF мәлімдемелерін пайдалану болып табылады.

Төменде келтірілген IF нұсқаларының қалай жұмыс істейтінін көрсететін мысал келтірілген:

#! / bin / bash

егер [$ 2 = «aboutdotcom»]
содан кейін
егер [$ 1 = «барлығы»]
содан кейін
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = «сипаттама»]
содан кейін
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

басқа
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
басқа
егер [$ 1 = «барлығы»]
содан кейін
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = «сипаттама»]
содан кейін
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
басқа
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi

Егер сіз ұнатасыз немесе көшіріп, оны rssget.sh файлына қойсаңыз, онда барлығын теріңіз.

Жоғарыда келтірілген сценарий RSS арнасын «about.com» немесе «lxer.com» деп таңдауға мүмкіндік беретін 2 параметрді ұсынады.

Оны іске қосу үшін төмендегілерді теріңіз:

sh rssget.sh туралы барлық деректеме

немесе

sh rssget.sh барлық lxer

Әрине, сипаттамалармен немесе жай атауларымен қамтамасыз ету үшін барлық сипаттамалармен немесе тақырыптармен ауыстыруға болады.

Жоғарыда айтылған код негізінен егер екінші параметр «aboutdotcom» болса, онда егер екінші параметр lxer болса, онда екінші сценарийден екіншісіне қарасақ, егер екінші нұсқаны қарастырсаңыз, онда ішкі if if операторы тақырыптарды, немесе барлығы.

Бұл сценарий салғастырылған IF сөзінің мысалында ғана берілген және сол сценарийде көптеген нәрселер дұрыс емес, олардың бәрін түсіндіру үшін тағы бір мақала қажет болады. Негізгі мәселе ол ауқымды емес.

Күнделікті Linux Пайдаланушысы немесе Linux Today сияқты тағы бір RSS арнасын қосқыңыз келді ме? Сценарий үлкен болар еді, ал егер сіз ішкі IF-нің өзгеруін қаласаңыз, оны әр түрлі орындарда өзгертуіңіз керек еді.

Енгізілген ИФ үшін уақыт пен орын бар болса да, оларды үнемді пайдалану керек. Әдетте кодты рефакторлау әдісі бар, осылайша сіз IF енгізілген ЕМЕС қажет емес. Мен болашақ мақалада осы тақырыпқа келемін.

Келіңіздер, қарапайым параметрлері бар адамдарға қатысты мәселені шешуді қарастырайық. Мысалы, жоғарыда келтірілген сценарийде, егер пайдаланушы 2-параметр ретінде «ondotcom» дегеннен басқа бірдеңеге кірсе, онда LXER-тан RSS-арнасынан мақалалардың тізімі пайда болады, ол пайдаланушы lxer-ні енгізе ме, жоқ па.

Бұдан басқа, егер пайдаланушы «барлығы» немесе «сипаттаманы» бірінші параметр ретінде енгізбесе, әдепкі - бұл пайдаланушы ойластырған немесе болмайтын тақырыптар тізімі.

Төмендегі сценарийді қараңыз (немесе оны rssget.sh файлына көшіріп, қойыңыз).

#! / bin / bash

егер [$ 2 = «aboutdotcom»] || [$ 2 = «lxer»]
содан кейін
егер [$ 1 = «барлығы»] || [$ 1 = «сипаттама»] || [$ 1 = «тақырып»]
содан кейін
егер [$ 2 = «aboutdotcom»]
содан кейін

егер [$ 1 = «барлығы»]
содан кейін
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = «сипаттама»]
содан кейін
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

басқа
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
басқа
егер [$ 1 = «барлығы»]
содан кейін
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = «сипаттама»]
содан кейін
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
басқа
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi

Ең алдымен, сценарийде үлкен әділдік пайда болды және сіз IF-нің кірістірілген IF-нің мәлімдемесі қалай басқарылатындығын тез көре аласыз.

Бұл сценарийде маңызды болып табылатын бит IF сөзі || 2-жолдағы және 4-жолдағы THEN бөлімінің мәлімдемесі.

| | НЕМЕСЕ білдіреді. Осылайша, егер жол [$ 2 = «aboutdotcom»] || [$ 2 = «lxer»] 2 параметрдің «aboutdotcom» немесе «lxer» тең екендігін тексереді. Егер ол болмаса, онда IF IF мәлімдемесі толығымен аяқталады, өйткені сыртқы IF IF үшін басқа ешқандай мәлімдеме жоқ .

Сол жолдағы 4-жолда [$ 1 = «барлығы»] || [$ 1 = «сипаттама»] || [$ 1 = «title»] бірінші параметр «барлық» немесе «сипаттама» немесе «атау» тең екендігін тексереді.

Енді, егер пайдаланушы rssget.sh картопты ірімшік етсе, ештеңе қайтарылмайды, ал олар LXER-дан тақырыптардың тізімін ала алмас бұрын.

Қарама-қарсы || && болып табылады. && операторы AND дегенді білдіреді.

Мен сценарийді күлімсірегендей етіп жасауды жоспарлап отырмын, бірақ ол пайдаланушыға 2 параметр ұсынғанына көз жеткізу үшін барлық маңызды тексеруді жасайды.

#! / bin / bash

егер [$ # -eq 2]
содан кейін

егер [$ 2 = «aboutdotcom»] || [$ 2 = «lxer»]
содан кейін
егер [$ 1 = «барлығы»] || [$ 1 = «сипаттама»] || [$ 1 = «тақырып»]
содан кейін
егер [$ 2 = «aboutdotcom»]
содан кейін

егер [$ 1 = «барлығы»]
содан кейін
rsstail -d -l -u http://z.about.com/6/o/m/linux_p2.xml;
elif [$ 1 = «сипаттама»]
содан кейін
rsstail -d -u http://z.about.com/6/o/m/linux_p2.xml;

басқа
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
басқа
егер [$ 1 = «барлығы»]
содан кейін
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
elif [$ 1 = «сипаттама»]
содан кейін
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
басқа
rsstail -u http://z.about.com/6/o/m/linux_p2.xml;
fi
fi
fi
fi
fi

Бұл сценарийде қосымша болып табылатын жалғыз бит - бұл басқа сыртқы IF-ді келесідей: егер [$ # -eq 2] . Егер сіз кіріс параметрлері туралы мақаланы оқыған болсаңыз, онда $ # параметрі кіріс параметрлері санын қайтарады. -eq тең деп саналады. ИФ нұсқаулығында, пайдаланушы 2 параметрді енгізгенін тексереді, егер олар солай етпесе, ештеңе жасамай, шығып кетеді. (Әсіресе достық емес).

Бұл оқу құралының өте үлкен екенін түсінемін. Осы аптада тағы да көп нәрсе жоқ, бірақ мен аяқталмай тұрып, сценарийді түзетуді қалаймын.

Шартты мәлімдемелер туралы білу қажет соңғы бір команда - CASE мәлімдемесі.

#! / bin / bash


егер [$ # -eq 2]
содан кейін
case $ 2 ішінде
aboutdotcom)
оқиға $ 1
барлық)
rsstail -d -l -u z.about.com/6/o/m/linux_p2.xml
;;
сипаттамасы)
rsstail -d -u z.about.com/6/o/m/linux_p2.xml
;;
тақырып)
rsstail -u z.about.com/6/o/m/linux.about.com/6/o/m/linux_p2.xml
;;
esac
;;
lxer)
оқиға $ 1
барлық)
rsstail -d -l -u http://lxer.com/module/newswire/headlines.rss
;;
сипаттамасы)
rsstail -d -u http://lxer.com/module/newswire/headlines.rss
;;
тақырып)
rsstail -u http://lxer.com/module/newswire/headlines.rss
;;
esac
;;
esac
fi

Іс бойынша өтініш - IF ELSE IF IF ELSE IF IF IF жазудың керемет тәсілі.

Мысалы, бұл логика

IF жеміс = банандар
Осыдан кейін
ELSE IF жеміс = апельсиндер
Осыдан кейін
ELSE IF жеміс = жүзім
Осыдан кейін
END IF

келесідей қайта жазылуы мүмкін:

жеміс жемісі
банандар)
Мұны істе
;;
апельсиндер)
Мұны істе
;;
жүзімдер)
Мұны істе
;;
esac

Іс бойынша кейінгі бірінші тармақ негізінен салыстыру керек нәрсе (яғни жеміс). Содан кейін жақшаға дейінгі әрбір элемент сіз салыстырып жатқан зат болып табылады және ол алдыңғы сызықтарға сәйкес келсе ;; болады. Шағымдық нұсқаулық кері эскакпен тоқтатылады (ол кері жағдайда).

Rssget.sh сценарийінде оқиға туралы мәлімдеме жеткілікті түрде жетілдірілмегенімен, бұл түршігерлік ұяшықтың кейбірін жояды.

Сценарийді шынымен жетілдіру үшін сізді айнымалылармен таныстыру қажет.

Келесі кодты қараңыз:

#! / bin / bash

lxer = «lxer.com/module/newswire/headlines.rss»
aboutdotcom = «z.about.com/6/o/m/linux_p2.xml»
display = «»
url = «»

егер [$ # -lt 2] || [$ # -gt 2]
содан кейін
echo «пайдалану: rssget.sh [all | description] title] [aboutdotcom | lxer]»;
Шығу;
fi

оқиға $ 1
барлық)
display = «- d -l -u»
;;
сипаттамасы)
display = «- d -u»
;;
тақырып)
display = «- u»
;;
esac

case $ 2 ішінде
aboutdotcom)
url = $ fordotcom;
;;
lxer)
url = $ lxer;
;;
esac
rsstail $ display $ url;

Айнымалы атау беріп, оған мән беру арқылы анықталады. Жоғарыда келтірілген мысалда айнымалы тапсырмалар:

lxer = «lxer.com/module/newswire/headlines.rss»
aboutdotcom = «z.about.com/6/o/m/linux_p2.xml»
display = «»
url = «»

Сценарий айнымалыларды қолдана отырып, бірден басқарылатын болады. Мысалы, әр параметр жеке өңделеді, сондықтан IF енгізілген IF операторлары жоқ.

Дисплейдің айнымалысы сіз бәрін, сипаттамасын немесе тақырыбын таңдайсыз ба, айнымалы мәнді шамамен dotcom айнымалы мәніне немесе lxer айнымалы мәніне орнатқаныңызға байланысты орнатасыз, егер сіз шамамен dotcom немесе lxer таңдасаңыз.

Rsstail пәрмені енді дисплей мен url мәнін дұрыс іске қосу үшін қолдануы керек.

Айнымалылар тек олардың атын беру арқылы орнатылса да, оларды пайдалану үшін сіз олардың алдына $ белгісін қоюыңыз керек. Басқаша айтқанда, айнымалы мән = айнымалы мәнді айнымалы мәнге айналдырса, айнымалы мәнді маған $ айнымалы мән береді.

Төменде осы оқулықтың соңғы сценарийі келтірілген.

#! / bin / bash

lxer = «lxer.com/module/newswire/headlines.rss»
aboutdotcom = «z.about.com/6/o/m/linux_p2.xml»
everydaylinuxuser = «http://feeds.feedburner.com/everydaylinuxuser/WLlg»
linuxtoday = «http://feedproxy.google.com/linuxtoday/linux»
use = «қолданылуы: rssget.sh [all | description] title] [lxer | fordotcom | everydaylinuxuser | linuxtoday]»
display = «»
url = «»

егер [$ # -lt 2] || [$ # -gt 2]
содан кейін
echo $ пайдалану;
Шығу;
fi

оқиға $ 1
барлық)
display = «- d -l -u»
;;
сипаттамасы)
display = «- d -u»
;;
тақырып)
display = «- u»
;;
*)
echo $ пайдалану;
Шығу;
;;
esac

case $ 2 ішінде
aboutdotcom)
url = $ fordotcom;
;;
lxer)
url = $ lxer;
;;
linuxtoday)
url = $ linuxtoday;
;;
әрбірdaylinuxuser)
url = $ everydaylinuxuser;
;;
*)
echo $ пайдалану;
Шығу;
esac

rsstail $ display $ url;

Жоғарыда келтірілген сценарий көптеген RSS арналарын енгізеді және пайдаланушыны сценарийді қалай қолдануға болатынын анықтайды, егер олар 2 айнымалы мәнді енгізбесе немесе айнымалыларға дұрыс емес параметрлерді енгізсе.

Резюме

Бұл эпикалық мақала болды және тым тез арада тым алыстады. Келесі нұсқауда мен IF нұсқамаларына қатысты барлық салыстыру нұсқаларын көрсетемін және айнымалы мәндер туралы сөйлесуге әлдеқайда көп нәрсе бар.

Жоғарыда келтірілген сценарийді жетілдіру үшін көп нәрсе жасалуы мүмкін және бұл циклдар, grep және тұрақты өрнектерді зерттеген кезде болашақ нұсқаулықтарда қамтылады.

GNOME жәшіктерін пайдаланып, виртуалды машинаны орнату үшін Windows және Ubuntu- ді қосарланған жүктеуден гөрі пайдалы нұсқаулықтарды табу үшін, l inux.about.com бөлімін қалай жасау керек (Мақалалар тізімін көру үшін төменде қарай жылжу).