да бяспечны нашы паняцці Мы даведаемся 2 вельмі карысныя інструменты для праграмавання, якія выдатна працуюць у Bash. Навучыцеся ствараць функцыі і вызначыць трубы спачатку можа здацца складаным, але потым мы ўбачым велізарнае ўтыліта што яны нам забяспечваюць. |
Індэкс
Трубы
Канкрэтна, і не прымаючы занадта шмат абаротаў, канвеер - гэта метад, які дазваляе накіроўваць выхад аднаго працэсу як уваход іншага, што дазваляе шэраг пераваг, такіх як памяншэнне радкоў кода, абыходжанне са зменнымі для захавання вынікаў і паляпшэнне эфектыўнасць сцэнарыя.
Труба звычайна распазнаецца, маючы сімвал | што дазваляе аб'ядноўваць выразы; Хоць ён выкарыстоўваецца па змаўчанні, існуюць і іншыя спосабы стварэння труб.
Прыклад: надрукаваць апошнія паведамленні ядра
#dmesg дазваляе праглядаць апошнія паведамленні ядра і загружаныя драйверы # падчас загрузкі сістэмы; tail друкуе апошнія часткі файла альбо #command
dmesg | хваста
Нягледзячы на тое, што яны могуць ускладняцца настолькі, наколькі мы хочам, асноўная структура канвеера дазваляе выкарыстоўваць вынік адной каманды як увод для наступнай, якая можа даць увод новай каманды, калі мы працягваем дадаваць паслядоўныя трубы.
funciones
Функцыі - гэта набор выказванняў, якія згрупаваны разам, каб іх можна было выканаць некалькі разоў без неабходнасці іх перапісваць. Гэта эквівалентна думцы, што калі мы навучымся гатаваць той ці іншы від ежы, мы будзем пісаць яе рэцэпт на аркушы, і кожны раз, калі мы хочам рыхтаваць ежу, мы звяртаемся да рэцэпта, а не перапісваем новы ліст з тым самым рэцэптам.
Мабыць, самае галоўнае ў функцыях - магчымасць перадачы параметраў, дадзеных, якія яны будуць выкарыстоўваць для іх апрацоўкі і атрымання вываду. Яго структура выглядае наступным чынам:
функцыя function-name {
працэсы
}
Прыклад: функцыя, якая паказвае службы, якія працуюць па пратаколе tcp. Мы таксама можам бачыць, як прымяняць больш труб.
# Мы вызначаем імя функцыі, яно можа падабацца нам.
функцыя services_tcp {
#cat аб'ядноўвае і адлюстроўвае змесціва папкі / etc / services, якая змяшчае ўсе службы з адпаведнымі партамі.
# першы grep бярэ спіс і выдаляе каментарыі, а –v мы інвертуем вынік
# другі grep паказвае толькі тыя, якія звязаны з tcp
кошка / і г.д. / паслугі | grep –v "^ #" | grep tcp
}
Калі нам трэба выканаць гэтую функцыю, нам проста трэба назваць яе імя:
tcp_services
У гэтым выпадку ён працуе без параметраў; У выпадку, калі яны ёсць, мы павінны дадаць іх, каб функцыя працавала належным чынам, інакш функцыя не будзе працаваць належным чынам. Выкарыстанне return дазваляе функцыі вярнуць значэнне ў выніку працэсу.
Прыклад: функцыя з уваходнымі параметрамі, якая вылічвае суму 2 лікаў.
#! / Bin / Баш
функцыйная сума ()
{
# пры дапамозе мы можам выканаць аперацыю ўнутры двукоссяў
хай "вынік = $ 1 + $ 2"
#return дазваляе вярнуць цэлае значэнне. Пасля таго, як зварот будзе выкананы, значэнне будзе ўнесена ўнутр зменнай $?
вярнуць $ вынік;
}
# Функцыя sum выклікаецца, і мы перадаем 2 ўваходныя параметры.
дадаць 2 3
#друкуе кошт $? з рэхам ацэнкі фактычнага значэння зменнай у двукоссях
echo -e "Вынік = $?";
7 каментарыяў, пакіньце свой
Я не ўпэўнены, але аператар return функцый служыць толькі для вяртання цэлага ліку ад 0 да 255, напрыклад, кодаў памылак "выхаду", звычайна 0, калі ўсё ў парадку, і іншая лічба для астатніх выпадкаў. Хоць у прыкладзе гэта працуе, я не думаю, што гэта добрая практыка вяртаць вынік з вяртаннем.
Там я кажу глупства га! вока! ха!
Праўда пакінула ў мяне сумневы. У любым выпадку, каб пазбегнуць праблем з функцыямі, мы можам замяніць return на рэха ў тым выпадку, калі функцыя імкнецца вярнуць альбо надрукаваць значэнне або радок.
Праўда, для вырашэння гэтага пытання вы можаце выкарыстоўваць каманду bc, у функцыі сумавання можна выкарыстоўваць: result = `echo $ 1 + $ 2 | да н.э. -ql`
добра,
Я хацеў бы ведаць, дзе я магу захаваць файлы bash для шырокага запуску сістэмы, і гэта не каталог bin, але можа быць домам для рэзервовага капіравання.
Дзякуй і з павагай.
Вялікі дзякуй, я пачынаю са сцэнарыяў, і праўда, гэта вельмі карысна, вы вельмі добра дзяліцеся сваімі ведамі!
прывітанне
Дзякуй! Абдымі!
Пабла
Сінтаксічная памылка: "(" нечакана
Я атрымліваю памылку пры спробе запусціць прыклад, я скапіяваў яго сапраўды гэтак жа
Што можа быць? я на Ubuntu 14.10