Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 127115 Details for
Bug 187935
[ru]bash-by-example-p1.xml v.1.3 translated
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
needs editing
bash-by-example-p1.xml (text/plain), 35.53 KB, created by
Sychev Sergey
on 2007-08-06 21:39:56 UTC
(
hide
)
Description:
needs editing
Filename:
MIME Type:
Creator:
Sychev Sergey
Created:
2007-08-06 21:39:56 UTC
Size:
35.53 KB
patch
obsolete
><?xml version='1.0' encoding="UTF-8"?> ><!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/articles/bash-by-example-p1.xml,v 1.7 2006/01/29 10:21:59 swift Exp $ --> ><!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> > ><guide link="/doc/ru/articles/bash-by-example-p1.xml" disclaimer="articles" lang="ru"> ><title>Bash by example, Part 1</title> > ><author title="Author"> > <mail link="drobbins@gentoo.org">Daniel Robbins</mail> ></author> > ><abstract> >ÐÑвоив пÑогÑаммиÑование на ÑзÑке ÑÑенаÑиев bash, ваÑе повÑедневное обÑение Ñ >Linux ÑÑÐ°Ð½ÐµÑ Ð±Ð¾Ð»ÐµÐµ пÑиÑÑнÑм и пÑодÑкÑивнÑм, Ð²Ñ Ð½Ð°ÑÑиÑеÑÑ Ð¸ÑполÑзоваÑÑ >ÑÑандаÑÑнÑе конÑÑÑÑкÑии UNIX, Ñакие как конвейеÑÑ Ð¸ пеÑенапÑавлениÑ, коÑоÑÑе >Ð²Ñ Ñже ÑÑпели ÑзнаÑÑ Ð¸ полÑбиÑÑ. Ð ÑÑой ÑеÑии из ÑÑÑÑ ÑÑаÑей ÐаниÑÐ»Ñ Ð Ð¾Ð±Ð±Ð¸Ð½Ñ >(Daniel Robbins) наÑÑÐ¸Ñ Ð²Ð°Ñ Ð½Ð° пÑимеÑÐ°Ñ Ð¿ÑогÑаммиÑоваÑÑ Ð² bash. Ðн Ð¾Ñ Ð²Ð°ÑÐ¸Ñ >ÑлеменÑаÑнÑе (ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÑÑÑ ÑеÑÐ¸Ñ Ð¿ÑевоÑÑ Ð¾Ð´Ð½Ñм поÑобием Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñков) и >подойдÑÑ Ðº более ÑложнÑм пÑиÑмам по Ñ Ð¾Ð´Ñ ÑÑаÑÑи. ></abstract> > ><!-- ÐеÑвонаÑалÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑÑой ÑÑаÑÑи бÑла опÑбликована в IBM developerWorks, >и ÑвлÑеÑÑÑ ÑобÑÑвенноÑÑÑÑ Westtech Information Services. ÐÑÐ¾Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ ÑвлÑеÑÑÑ >обновленной веÑÑией оÑигиналÑной ÑÑаÑÑи, и ÑодеÑÐ¶Ð¸Ñ ÑазлиÑнÑе дополнениÑ, >ÑделаннÑе командой Gentoo Linux Documentation team --> > ><version>1.3</version> ><date>2005-10-09</date> > ><chapter> ><title>ÐÑÐ½Ð¾Ð²Ñ Ð¿ÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² Bourne again shell (bash)</title> ><section> ><title>Ðведение</title> ><body> > ><p> >ÐÑ ÑдивиÑеÑÑ, когда ÑзнаеÑе, поÑÐµÐ¼Ñ Ñак важно ÑмеÑÑ Ð¿ÑогÑаммиÑоваÑÑ Ð² bash. >Ðа ÑÑо еÑÑÑ ÑÑд пÑиÑин: ></p> > ></body> ></section> ><section> ><title>Bash Ñже запÑÑена</title> ><body> > ><p> >ÐбÑаÑиÑе внимание — Ð²Ñ Ñже ÑабоÑаеÑе в bash. Ðаже еÑли заменена >ÑÑандаÑÑÐ½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка, bash по пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¾ÑÑаеÑÑÑ Ð² ÑиÑÑеме и ÑиÑоко в ней >иÑполÑзÑеÑÑÑ, Ñ. к. она ÑвлÑеÑÑÑ ÑÑандаÑÑной в Linux. ÐлагодаÑÑ ÑÑомÑ, >ÑÑенаÑий bash не Ð·Ð°Ð¹Ð¼ÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ памÑÑи, поÑколÑÐºÑ Ð±ÑÐ´ÐµÑ ÑазделÑÑÑ ÐµÑ Ñ Ð¿ÑоÑеÑÑом >оболоÑки. ÐаÑем иÑполÑзоваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй инÑеÑпÑеÑаÑÐ¾Ñ (коÑоÑÑй >«ÑÑеÑÑ» 500 ÐРпамÑÑи), еÑли ÑÑÑеÑÑвÑÐµÑ bash, коÑоÑÐ°Ñ Ñже >запÑÑена и ÑпоÑобна вÑполниÑÑ Ð¿Ð¾ÑÑавленнÑÑ Ð·Ð°Ð´Ð°ÑÑ? ></p> > ></body> ></section> ><section> ><title>ÐÑ Ñже иÑполÑзÑеÑе bash</title> ><body> > ><p> >Ðо bash не ÑолÑко поÑÑоÑнно запÑÑена, но и иÑполÑзÑеÑÑÑ Ð¿ÑакÑиÑеÑки ежедневно! >ÐоÑÑÐ¾Ð¼Ñ Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑзнаÑÑ, как иÑполÑзоваÑÑ ÐµÑ Ñ Ð¼Ð°ÐºÑималÑной ÑÑÑекÑивноÑÑÑÑ, >Ñделав ÑабоÑÑ Ñ bash более пÑиÑÑной и пÑодÑкÑивной. Ðо заÑем изÑÑаÑÑ >пÑогÑаммиÑование в bash? РвÑе поÑомÑ, ÑÑо Ð²Ñ Ñже Ð·Ð½Ð°ÐºÐ¾Ð¼Ñ Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸, >копиÑованием Ñайлов, иÑполÑзованием конвейеÑов и пеÑенапÑавлением вÑвода. >Так поÑÐµÐ¼Ñ Ð¶Ðµ не вÑÑÑиÑÑ ÑзÑк, коÑоÑÑй Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð²Ð°Ð¼ иÑполÑзоваÑÑ ÑÑи моÑнÑе >конÑÑÑÑкÑии более ÑÑÑекÑивно, Ñаз Ñж Ð²Ñ Ñ Ð½Ð¸Ð¼Ð¸ знакомÑ? ÐоманднÑе оболоÑки >ÑаÑкÑÑваÑÑ Ð¿Ð¾ÑенÑиал ÑиÑÑем UNIX, а bash, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, оболоÑка Linux. Ðна >ÑвлÑеÑÑÑ Ð²ÑÑокоÑÑовневой пÑоÑлойкой Ð¼ÐµÐ¶Ð´Ñ Ð²Ð°Ð¼Ð¸ и компÑÑÑеÑом. ÐовÑÑив Ñвои >Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ bash, Ð²Ñ Ð°Ð²ÑомаÑиÑеÑки повÑÑиÑе пÑоизводиÑелÑноÑÑÑ ÑабоÑÑ Ð² Linux и >UNIX, к ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑÑо Ñак пÑоÑÑо! ></p> > ></body> ></section> ><section> ><title>ÐÑÑаниÑа Ñ bash</title> ><body> > ><p> >ÐевеÑнÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´ в изÑÑении bash Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð²ÐµÑÑма запÑÑаннÑм делом. Ðногие >новиÑки, набÑав <c>man bash</c>, Ð¶ÐµÐ»Ð°Ñ Ð¿Ð¾ÑмоÑÑеÑÑ ÑпÑавкÑ, ÑÑалкиваÑÑÑÑ ÑолÑко >Ñ ÑÑÑ Ð¸Ð¼ ÑÐµÑ Ð½Ð¸ÑеÑким опиÑанием ÑÑнкÑионалÑноÑÑи оболоÑки. ÐÑÑгие, иÑполÑзÑÑ ><c>info bash</c> (Ð´Ð»Ñ Ð¿ÑоÑмоÑÑа докÑменÑаÑии GNU info), полÑÑаÑÑ ÑÑ Ð¶Ðµ ÑÑÑаниÑÑ >ÑпÑавки или, еÑли ÑлÑбнеÑÑÑ ÑдаÑа, Ñлегка более дÑÑжелÑбнÑÑ ÐµÑ Ð²ÐµÑÑиÑ. ></p> > ><p> >ХоÑÑ ÑÑо и Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑмеÑиÑÑ Ð¿Ñл наÑинаÑÑÐ¸Ñ , но ÑÑандаÑÑÐ½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ bash не >ÑвлÑеÑÑÑ ÑÑебником и ÑаÑÑÑиÑана на ÑÐµÑ , кÑо Ñже знаком Ñ Ð¾Ñновами >пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² оболоÑке. ÐеÑомненно, в ÑпÑавоÑной ÑиÑÑеме ÑодеÑжиÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ >пÑекÑаÑной ÑÐµÑ Ð½Ð¸ÑеÑкой инÑоÑмаÑии, но она вÑÑд ли Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð½Ð¾Ð²Ð¸Ñкам. ></p> > ><p> >Ðак Ñаз ÑÑÐ¾Ð¼Ñ Ð¿Ð¾ÑвÑÑен ÑÑÐ¾Ñ Ñикл ÑÑаÑей. Рнем показано на пÑакÑике, как >иÑполÑзоваÑÑ Ð¿ÑогÑаммнÑе конÑÑÑÑкÑии bash в Ñоздании ÑобÑÑвеннÑÑ ÑÑенаÑиев. >ÐмеÑÑо ÑÐµÑ Ð½Ð¸ÑеÑÐºÐ¸Ñ Ð´ÐµÑалей, понÑÑнÑм ÑзÑком обÑÑÑÐ½ÐµÐ½Ñ Ð½Ðµ ÑолÑко пÑинÑÐ¸Ð¿Ñ >ÑабоÑÑ, но и облаÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑий. РконÑÑ ÑÑеÑÑей ÑÑаÑÑи, Ð²Ñ >ÑможеÑе Ñпокойно ÑоздаваÑÑ bash ÑÑенаÑии, а Ñакже дополниÑÑ Ñвои Ð·Ð½Ð°Ð½Ð¸Ñ >ÑÑением, а главное пониманием, ÑÑандаÑÑной докÑменÑаÑии bash. ÐавайÑе наÑнем. ></p> > ></body> ></section> ><section> ><title>ÐеÑеменнÑе ÑÑедÑ</title> ><body> > ><p> >Ð bash, как и в дÑÑÐ³Ð¸Ñ Ð¾Ð±Ð¾Ð»Ð¾ÑÐºÐ°Ñ , полÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделÑÑÑ Ð¿ÐµÑеменнÑе >ÑÑедÑ, коÑоÑÑе Ñ ÑанÑÑÑÑ Ð²Ð½ÑÑÑи Ð½ÐµÑ Ð² виде ASCII ÑÑÑок. Ðдним из наиболее >ÑдобнÑÑ ÑвойÑÑв пеÑеменнÑÑ ÑÑÐµÐ´Ñ ÑвлÑеÑÑÑ Ñо, ÑÑо они ÑвлÑÑÑÑÑ Ð½ÐµÐ¾ÑÑемлимой >ÑаÑÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ пÑоÑеÑÑов UNIX. ÐÑо ознаÑаеÑ, ÑÑо пеÑеменнÑе ÑÑÐµÐ´Ñ Ð¼Ð¾Ð³ÑÑ >иÑполÑзоваÑÑÑÑ Ð½Ðµ ÑолÑко в ÑÑенаÑиÑÑ Ð¾Ð±Ð¾Ð»Ð¾Ñки, но и в обÑÑнÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ð°Ñ . Ðогда >Ð¼Ñ «ÑкÑпоÑÑиÑÑем» пеÑеменнÑÑ Ð¸Ð· bash, вÑе запÑÑеннÑе впоÑледÑÑвии >пÑогÑÐ°Ð¼Ð¼Ñ ÑмогÑÑ ÐµÑ Ð¸ÑполÑзоваÑÑ Ð½ÐµÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо она опÑеделена ÑÑенаÑием >оболоÑки. ÐозÑмÑм, к пÑимеÑÑ, ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ <c>vipw</c>, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ >админиÑÑÑаÑоÑÑ ÑедакÑиÑоваÑÑ ÑиÑÑемнÑй Ñайл паÑолей. ÐапиÑав в пеÑеменнÑÑ ÑÑÐµÐ´Ñ ><c>EDITOR</c> Ð¸Ð¼Ñ Ñвоего лÑбимого ÑекÑÑового ÑедакÑоÑа, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе наÑÑÑоиÑÑ >vipw на его иÑполÑзование, вмеÑÑо vi (оÑÐµÐ½Ñ Ñдобно, еÑли Ð²Ñ Ð¿ÑивÑкли >иÑполÑзоваÑÑ xemacs и вам не нÑавиÑÑÑ vi). ></p> > ><p> >СÑандаÑÑнÑй ÑпоÑоб обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿ÐµÑеменной ÑÑÐµÐ´Ñ Ð² bash вÑглÑÐ´Ð¸Ñ Ñак: ></p> > ><pre caption="ÐбÑÑвление пеÑеменной ÑÑедÑ"> >$ <i>myvar='This is my environment variable!'</i> ></pre> > ><p> >ÐÑа команда обÑÑвлÑÐµÑ Ð¿ÐµÑеменнÑÑ ÑÑÐµÐ´Ñ Ð¿Ð¾Ð´ именем «myvar» и >ÑодеÑÐ¶Ð¸Ñ ÑÑÑÐ¾ÐºÑ «This is my environment variable!». СÑÐ¾Ð¸Ñ Ð·Ð°Ð¼ÐµÑиÑÑ >ÑледÑÑÑее: во-пеÑвÑÑ , Ð½ÐµÑ Ð¿Ñобелов по обе ÑÑоÑÐ¾Ð½Ñ Ð¾Ñ «=»; >поÑколÑÐºÑ ÑÑо пÑÐ¸Ð²ÐµÐ´ÐµÑ Ðº оÑибке (можеÑе пÑовеÑиÑÑ). Ðо-вÑоÑÑÑ , можно обойÑиÑÑ Ð¸ >без кавÑÑек, еÑли наÑа пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑодеÑÐ¶Ð¸Ñ Ð¾Ð´Ð½Ð¾ Ñлово (вклÑÑÐ°Ñ Ð¿ÑÐ¾Ð±ÐµÐ»Ñ Ð¸Ð»Ð¸ >знаки ÑабÑлÑÑии). ></p> > ><note> >Ðолее подÑобнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± иÑполÑзовании кавÑÑек в bash, можно найÑи в >Ñазделе «QUOTING» ÑпÑавоÑной ÑÑÑаниÑÑ bash, поÑколÑÐºÑ Ð½Ð°Ð»Ð¸Ñие >ÑпеÑиалÑнÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑей Ñимволов, коÑоÑÑе «ÑаÑÑиÑÑÑÑ» >(изменÑÑÑ) ÑÑнкÑионалÑноÑÑÑ, Ð¼Ð¾Ð¶ÐµÑ ÑÑÑеÑÑвенно измениÑÑ Ð¾Ð±ÑабоÑÐºÑ ÑÑÑок в bash. >ÐÑ Ð¶Ðµ бÑдем ÑаÑÑмаÑÑиваÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ ÑаÑÑÑе ÑлÑÑаи иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð²ÑÑек. ></note> > ><p> >Ð-ÑÑеÑÑÐ¸Ñ , Ñ Ð¾ÑÑ Ð¼Ñ Ð¸ можем иÑполÑзоваÑÑ ÐºÐ°Ðº апоÑÑÑоÑ, Ñак и двойнÑе кавÑÑки, >иÑполÑзование двойнÑÑ ÐºÐ°Ð²ÑÑек в пÑиведенном пÑимеÑе пÑиведÑÑ Ðº оÑибке. ÐоÑемÑ? >РпоÑомÑ, ÑÑо иÑполÑзование апоÑÑÑоÑа оÑклÑÑÐ°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ bash делаÑÑ >подÑÑановки, коÑоÑÑе заклÑÑаÑÑÑÑ Ð² замене ÑпеÑиалÑнÑÑ Ñимволов и >поÑледоваÑелÑноÑÑей на опÑеделеннÑе знаÑениÑ. ÐапÑимеÑ, Ñимвол «!» >— Ñимвол подÑÑановки иÑÑоÑии команд, коÑоÑÑй bash обÑÑно заменÑÐµÑ Ð½Ð° >пÑедÑдÑÑÑÑ Ð½Ð°Ð±ÑаннÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ. (ÐÑ Ð½Ðµ бÑдем оÑÑанавливаÑÑÑÑ Ð½Ð° подÑÑановке >иÑÑоÑии команд, поÑколÑÐºÑ Ð¾Ð½Ð° Ñедко иÑполÑзÑеÑÑÑ Ð² bash пÑогÑаммиÑовании. >ÐополниÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе найÑи в Ñазделе >«HISTORY EXPANSION» ÑпÑавоÑной ÑÑÑаниÑÑ bash.) ХоÑÑ ÑÑа >макÑо-ÑÑнкÑионалÑноÑÑÑ Ð¸ Ñдобна, но ÑейÑÐ°Ñ Ð½Ð°Ñ Ð±Ð¾Ð»ÑÑе инÑеÑеÑÑÐµÑ >воÑклиÑаÑелÑнÑй знак в конÑе знаÑÐµÐ½Ð¸Ñ Ð½Ð°Ñей пеÑеменной, Ñем макÑоÑ. ></p> > ><p> >ТепеÑÑ Ð´Ð°Ð²Ð°Ð¹Ñе поÑмоÑÑим, как иÑполÑзоваÑÑ Ð¿ÐµÑеменнÑе ÑÑедÑ. ÐапÑимеÑ: ></p> > ><pre caption="ÐÑполÑзование пеÑеменнÑÑ ÑÑÐµÐ´Ñ ÑÑедÑ"> >$ <i>echo $myvar</i> >This is my environment variable! ></pre> > ><p> >ÐоÑÑавив $ пеÑед именем пеÑеменной, Ð¼Ñ Ð³Ð¾Ð²Ð¾Ñим bash замениÑÑ ÐµÑ Ð½Ð° знаÑение >myvar. Ð ÑеÑминологии bash ÑÑо назÑваеÑÑÑ «Ð¿Ð¾Ð´ÑÑановкой пеÑеменнÑÑ ». >ÐÑ Ð° ÑÑо пÑоизойдеÑ, еÑли Ð¼Ñ Ñделаем ÑледÑÑÑее: ></p> > ><pre caption="ÐопÑÑка иÑполÑзоваÑÑ Ð¿ÐµÑеменнÑÑ"> >$ <i>echo foo$myvarbar</i> >foo ></pre> > ><p> >ÐÑ Ñ Ð¾Ñели полÑÑиÑÑ «fooThis is my environment variable!bar», но Ñ >Ð½Ð°Ñ Ð½Ðµ вÑÑло. ЧÑо же пÑоизоÑло? ÐоÑоÑе говоÑÑ, Ð¼Ñ Ð²Ð²ÐµÐ»Ð¸ bash в заблÑждение. То >еÑÑÑ Ð½Ðµ возможно понÑÑÑ ÐºÐ°ÐºÑÑ Ð¿ÐµÑеменнÑÑ Ð¼Ñ Ð¸Ð¼ÐµÐ»Ð¸ в Ð²Ð¸Ð´Ñ — $m, $my, >$myvar, $myvarbar и Ñ.д. Ðак Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ более ÑÑно и ÑеÑко ÑказаÑÑ bash, какÑÑ >пеÑеменнÑÑ Ð¼Ñ Ñ Ð¾Ñим полÑÑиÑÑ? ÐопÑобÑйÑе: ></p> > ><pre caption="ÐÑавилÑÐ½Ð°Ñ Ð¿Ð¾Ð´ÑÑановка пеÑеменной"> >$ <i>echo foo${myvar}bar</i> >fooThis is my environment variable!bar ></pre> > ><p> >Ðак видиÑе, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ заклÑÑиÑÑ Ð¿ÐµÑеменнÑÑ Ð² ÑигÑÑнÑе Ñкобки, когда ÐµÑ ÑÑÑдно >вÑделиÑÑ Ð¸Ð· оÑÑалÑного ÑекÑÑа. Ð Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº иÑполÑзование $myvar бÑÑÑÑее и >Ñдобней, ${myvar} ÑабоÑÐ°ÐµÑ Ð±Ð¾Ð»ÐµÐµ пÑедÑказÑемо. Ðо по ÑÑнкÑионалÑноÑÑи они не >оÑлиÑаÑÑÑÑ, поÑÑÐ¾Ð¼Ñ Ð±Ñдем иÑполÑзоваÑÑ Ð¾Ð±Ðµ ÑоÑÐ¼Ñ Ð² далÑнейÑем. ÐÑоÑÑо >запомниÑе, ÑÑо ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð±Ð¾Ð»ÐµÐµ ÑÑÑогÑÑ ÑоÑÐ¼Ñ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² >ÑигÑÑнÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ Ñогда, когда пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ оÑделена Ð¾Ñ Ð¾ÐºÑÑжаÑÑего ÑекÑÑа >пÑобелами или знаками ÑабÑлÑÑии. ></p> > ><p> >ÐÑ Ñже Ñпоминали возможноÑÑÑ «ÑкÑпоÑÑиÑованиѻ пеÑеменнÑÑ . Ðогда >ÑкÑпоÑÑиÑÑеÑÑÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑÑедÑ, она авÑомаÑиÑеÑки ÑÑановиÑÑÑ Ð´Ð¾ÑÑÑпной вÑем >запÑÑеннÑм впоÑледÑÑвии ÑÑенаÑиÑм и пÑогÑаммам. СÑенаÑии оболоÑки могÑÑ >«Ð´Ð¾Ð±ÑаÑÑÑÑ» до пеÑеменной ÑÑедÑ, иÑполÑзÑÑ Ð²ÑÑÑоеннÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжкÑ, >в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº пÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð°Ð¿Ð¸ÑаннÑе на C Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ getenv(). >Ðиже пÑиводиÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÑ C кода, коÑоÑÑй Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð¼ ÑазобÑаÑÑÑÑ Ð² иÑполÑзовании >пеÑеменнÑÑ ÑÑÐµÐ´Ñ Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ C: ></p> > ><pre caption="myvar.c — пÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменной окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð² C"> >#include <stdio.h> >#include <stdlib.h> > >int main(void) { > char *myenvvar=getenv("EDITOR"); > printf("The editor environment variable is set to %s\n",myenvvar); >} ></pre> > ><p> >Ð¡Ð¾Ñ ÑаниÑе пÑиведеннÑй вÑÑе код в Ñайл <path>myenv.c</path>, и заÑем >ÑкомпилиÑÑйÑе его ÑледÑÑÑей командой: ></p> > ><pre caption="ÐомпилиÑование иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода"> >$ <i>gcc myenv.c -o myenv</i> ></pre> > ><p> >ТепеÑÑ Ð² каÑалоге поÑвиÑÑÑ Ð¸ÑполнÑÐµÐ¼Ð°Ñ Ð¿ÑогÑамма, коÑоÑÐ°Ñ Ð¿Ñи запÑÑке бÑÐ´ÐµÑ >вÑводиÑÑ Ð·Ð½Ð°Ñение пеÑеменной ÑÑÐµÐ´Ñ <c>EDITOR</c>, еÑли ÑÐ°ÐºÐ¾Ð²Ð°Ñ Ð¸Ð¼ÐµÐµÑÑÑ. >ÐÐ¾Ñ ÑÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ, когда Ð¼Ñ ÐµÑ Ð·Ð°Ð¿ÑÑÑим: ></p> > ><pre caption="ÐапÑÑк наÑей пÑогÑаммÑ"> >$ <i>./myenv</i> >The editor environment variable is set to (null) ></pre> > ><p> >СÑÑанно... поÑколÑÐºÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ <c>EDITOR</c> на даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ð¸Ñего не >ÑодеÑжиÑ, и наÑа пÑогÑамма полÑÑила пÑÑÑÑÑ ÑÑÑокÑ. ÐавайÑе зададим ей >какое-нибÑÐ´Ñ Ð·Ð½Ð°Ñение: ></p> > ><pre caption="ÐопÑÑка задаÑÑ Ð·Ð½Ð°Ñение пеÑеменной"> >$ <i>EDITOR=xemacs</i> >$ <i>./myenv</i> >The editor environment variable is set to (null) ></pre> > ><p> >ÐÑ Ð¾Ð¶Ð¸Ð´Ð°Ð»Ð¸, ÑÑо myenv ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ñение "xemacs", но опÑÑÑ Ð¾ÑиблиÑÑ, поÑколÑÐºÑ >не ÑкÑпоÑÑиÑовали пеÑеменнÑÑ ÑÑÐµÐ´Ñ <c>EDITOR</c>. Ðа ÑÑÐ¾Ñ Ñаз вÑе должно >заÑабоÑаÑÑ: ></p> > ><pre caption="ÐÑвод пÑогÑÐ°Ð¼Ð¼Ñ Ð¿Ð¾Ñле ÑкÑпоÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменной"> >$ <i>export EDITOR</i> >$ <i>./myenv</i> >The editor environment variable is set to xemacs ></pre> > ><p> >ÐÑак, Ð¼Ñ ÑбедилиÑÑ Ð½Ð° пÑимеÑе, ÑÑо дÑÑгой пÑоÑеÑÑ (в наÑем ÑлÑÑае пÑогÑамма на >C) не Ð²Ð¸Ð´Ð¸Ñ Ð¿ÐµÑеменнÑÑ ÑÑÐµÐ´Ñ Ð´Ð¾ ÑкÑпоÑÑиÑованиÑ. СÑÐ¾Ð¸Ñ Ð·Ð°Ð¼ÐµÑиÑÑ, ÑÑо можно >обÑÑвиÑÑ Ð¸ ÑкÑпоÑÑиÑоваÑÑ Ð¿ÐµÑеменнÑÑ ÑÑÐµÐ´Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑокой, а именно: ></p> > ><pre caption="ÐбÑÑвление и ÑкÑпоÑÑиÑование пеÑеменной одной командой"> >$ <i>export EDITOR=xemacs</i> ></pre> > ><p> >ÐÑо ÑабоÑÐ°ÐµÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñно двÑÑÑÑоÑÐ½Ð¾Ð¼Ñ Ð²Ð°ÑианÑÑ. ТепеÑÑ Ñамое вÑÐµÐ¼Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ, как >ÑниÑÑожиÑÑ Ð¿ÐµÑеменнÑÑ ÑÑÐµÐ´Ñ Ð¸ÑполÑзÑÑ <c>unset</c>: ></p> > ><pre caption="Unsetting the variable"> >$ <i>unset EDITOR</i> >$ <i>./myenv</i> >The editor environment variable is set to (null) ></pre> > ></body> ></section> ><section> ><title>Разделение ÑÑÑок</title> ><body> > ><p> >Разделением ÑÑÑок — как ÑледÑÐµÑ Ð¸Ð· названиÑ, ÑвлÑеÑÑÑ Ð¿ÑедÑÑавление >пеÑвонаÑалÑной ÑÑÑоки в виде менÑÑÐ¸Ñ , оÑделÑнÑÑ ÑегменÑов — и ÑÑо одна >из задаÑ, коÑоÑÑÑ Ð²ÑполнÑÑÑ Ð±Ð¾Ð»ÑÑинÑÑво ÑÑенаÑиев оболоÑки. СÑенаÑиÑм поÑÑоÑнно >пÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¿Ð¾Ð»Ð½Ñй пÑÑÑ, и вÑделÑÑÑ Ð¸Ð· него завеÑÑаÑÑий Ñайл или >каÑалог. ХоÑÑ Ð¸ возможно (пÑиÑем, доÑÑаÑоÑно легко!) ÑеализоваÑÑ ÑÑо в bash, >но ÑÑандаÑÑÐ½Ð°Ñ UNIX-пÑогÑамма <c>basenamе</c> Ð´ÐµÐ»Ð°ÐµÑ Ñо же Ñамое, и веÑÑма >Ð½ÐµÐ¿Ð»Ð¾Ñ Ð¾: ></p> > ><pre caption="ÐÑполÑзование basename"> >$ <i>basename /usr/local/share/doc/foo/foo.txt</i> >foo.txt >$ <i>basename /usr/home/drobbins</i> >drobbins ></pre> > ><p> ><c>basename</c> ÑвлÑеÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно ÑдобнÑм инÑÑÑÑменÑом Ð´Ð»Ñ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑÑок. ÐÑ >«ÐºÐ¾Ð»Ð»ÐµÐ³Ð°» — <c>dirname</c>, возвÑаÑÐ°ÐµÑ «Ð´ÑÑгÑÑ» >ÑаÑÑÑ Ð¿ÑÑи, коÑоÑÑÑ <c>basename</c> оÑбÑаÑÑваеÑ: ></p> > ><pre caption="ÐÑполÑзование dirname"> >$ <i>dirname /usr/local/share/doc/foo/foo.txt</i> >/usr/local/share/doc/foo >$ <i>dirname /usr/home/drobbins/</i> >/usr/home ></pre> > ><note> >Ðи <c>dirname</c>, ни <c>basename</c> не обÑаÑаÑÑÑÑ Ðº Ñайлам и каÑалогам на >диÑке; они ÑабоÑаÑÑ ÑолÑко Ñо ÑÑÑоками ></note> > ></body> ></section> ><section> ><title>ÐодÑÑановка команд</title> ><body> > ><p> >ÐÑе одна ÑÐ´Ð¾Ð±Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ, коÑоÑÑÑ Ð½Ñжно знаÑÑ — Ñоздание пеÑеменной >ÑÑедÑ, коÑоÑÐ°Ñ ÑодеÑÐ¶Ð¸Ñ Ð² Ñебе вÑполнÑемÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ. ÐÑо оÑÐµÐ½Ñ Ð»ÐµÐ³ÐºÐ¾ ÑделаÑÑ: ></p> > ><pre caption="Создание пеÑеменной ÑÑедÑ, ÑодеÑжаÑей вÑполнÑемÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ"> >$ <i>MYDIR=`dirname /usr/local/share/doc/foo/foo.txt`</i> >$ <i>echo $MYDIR</i> >/usr/local/share/doc/foo ></pre> > ><p> >ÐÑоделанное вÑÑе назÑваеÑÑÑ <e>подÑÑановкой команд</e>. ÐбÑаÑим внимание на >ÑледÑÑÑие моменÑÑ. РпеÑвой ÑÑÑоÑке Ð¼Ñ Ð¿ÑоÑÑо заклÑÑили нÑжнÑÑ Ð½Ð°Ð¼ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² >обÑаÑнÑе кавÑÑки. ÐÑо не обÑÑнÑй апоÑÑÑÐ¾Ñ Ð¸ ÑаÑположен он на клавиаÑÑÑе вÑÑе >клавиÑи «TAB». ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ пÑоделаÑÑ Ñо же Ñамое пÑи помоÑи >алÑÑеÑнаÑивного ÑинÑакÑиÑа подÑÑановки команд: ></p> > ><pre caption="ÐлÑÑеÑнаÑивнÑй ÑинÑакÑÐ¸Ñ Ð¿Ð¾Ð´ÑÑановки команд"> >$ <i>MYDIR=$(dirname /usr/local/share/doc/foo/foo.txt)</i> >$ <i>echo $MYDIR</i> >/usr/local/share/doc/foo ></pre> > ><p> >Ðак видиÑе, bash пÑедоÑÑавлÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑпоÑобов ÑеализаÑии Ð¾Ð´Ð½Ð¸Ñ Ð¸ ÑÐµÑ Ð¶Ðµ >веÑей. ÐÑполÑзÑÑ Ð¿Ð¾Ð´ÑÑÐ°Ð½Ð¾Ð²ÐºÑ ÐºÐ¾Ð¼Ð°Ð½Ð´, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ помеÑÑиÑÑ Ð»ÑбÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸Ð»Ð¸ >ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ Ð¼ÐµÐ¶Ð´Ñ <e>` `</e> или <e>$( )</e> и аÑÑоÑииÑоваÑÑ Ñ Ð¿ÐµÑеменной >ÑÑедÑ. Ð£Ð´Ð¾Ð±Ð½Ð°Ñ ÑÑÑка! ÐÐ¾Ñ ÐµÑе пÑÐ¸Ð¼ÐµÑ Ñого, как иÑполÑзоваÑÑ Ð¿Ð¾Ð´ÑÑÐ°Ð½Ð¾Ð²ÐºÑ >конвейеÑа команд: ></p> > ><pre caption="ÐодÑÑановка конвейеÑа команд"> >$ <i>MYFILES=$(ls /etc | grep pa)</i> >$ <i>echo $MYFILES</i> >pam.d passwd ></pre> > ></body> ></section> ><section> ><title>ÐÑоÑеÑÑионалÑнÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´ к ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑÑок</title> ><body> > ><p> >ÐезÑÑловно <c>basename</c> и <c>dirname</c> великолепнÑе инÑÑÑÑменÑÑ, но иногда >ÑÑебÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ Ñложное, по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñо ÑÑандаÑÑнÑм, Ñазделение ÑÑÑок. ÐÑли Ð¼Ñ >Ñ Ð¾Ñим неÑÑо болÑÑего, Ñо можно воÑполÑзоваÑÑÑÑ ÑаÑÑиÑенной ÑÑнкÑионалÑноÑÑÑÑ >подÑÑановки пеÑеменнÑÑ bash. ÐÑ Ñже иÑполÑзовали ÑÑандаÑÑнÑе пÑÐ¸ÐµÐ¼Ñ Ð¿Ð¾Ð´ÑÑановки >пеÑеменнÑÑ , коÑоÑÑе вÑглÑдели, напÑимеÑ, Ñак: ${MYVAR}. Ðо Ñ bash в запаÑе еÑÑÑ >еÑе неÑколÑко пÑиемов. ÐоÑмоÑÑим на пÑимеÑÑ: ></p> > ><pre caption="ÐÑимеÑÑ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑÑок"> >$ <i>MYVAR=foodforthought.jpg</i> >$ <i>echo ${MYVAR##*fo}</i> >rthought.jpg >$ <i>echo ${MYVAR#*fo}</i> >odforthought.jpg ></pre> > ><p> >РпеÑвом пÑимеÑе Ð¼Ñ Ð½Ð°Ð±Ñали ${MYVAR##*fo}. Ð ÑÑо же ÑÑо ознаÑаеÑ? РпÑинÑипе, >внÑÑÑи ${ }, Ð¼Ñ Ð¿Ð¾Ð¼ÐµÑÑили Ð¸Ð¼Ñ Ð¿ÐµÑеменной, два ## и Ñаблон («*fo»). >ÐаÑем, bash взÑла пеÑеменнÑÑ <c>MYVAR</c>, наÑла в ней ÑамÑÑ Ð´Ð»Ð¸Ð½Ð½ÑÑ Ð¿Ð¾Ð´ÑÑÑокÑ, >ÑÑиÑÐ°Ñ Ð¾Ñ Ð½Ð°Ñала ÑÑÑоки «foodforthought.jpg», коÑоÑÐ°Ñ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ >Ñаблоном «*fo» и оÑделила еÑ. С пеÑвого Ñаза ÑложноваÑо понÑÑÑ, как >ÑабоÑÐ°ÐµÑ ÑпеÑиалÑÐ½Ð°Ñ Ð¾Ð¿ÑÐ¸Ñ «##», Ñак ÑÑо ÑаÑÑмоÑÑим по Ñагам, как >bash обÑабаÑÑÐ²Ð°ÐµÑ ÑÑо вÑÑажение. СпеÑва, bash оÑÑÑеÑÑвлÑÐµÑ Ð¿Ð¾Ð¸Ñк подÑÑÑоки Ñ >наÑала «foodforthought.jpg», ÑÑо ÑооÑвеÑÑÑвÑÐµÑ ÑÐ°Ð±Ð»Ð¾Ð½Ñ >«*fo». ÐÐ¾Ñ Ð¿ÑовеÑеннÑе подÑÑÑоки: ></p> > ><pre caption="ÐÑовеÑеннÑе подÑÑÑоки"> >f >fo СÐÐÐÐÐÐÐÐÐ *fo >foo >food >foodf >foodfo СÐÐÐÐÐÐÐÐÐ *fo >foodfor >foodfort >foodforth >foodfortho >foodforthou >foodforthoug >foodforthought >foodforthought.j >foodforthought.jp >foodforthought.jpg ></pre> > ><p> >ÐÑовеÑив вÑе ÑÑÑоки на Ñовпадение, bash наÑла две. Ðна вÑделила ÑамÑÑ Ð´Ð»Ð¸Ð½Ð½ÑÑ >подÑÑÑокÑ, ÑбÑала ÐµÑ Ð¸Ð· пеÑвонаÑалÑной ÑÑÑоки и веÑнÑла ÑезÑлÑÑаÑ. ></p> > ><p> >ÐÑоÑой вид подÑÑановки пеÑеменнÑÑ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¿ÐµÑвÑм, за иÑклÑÑением Ñого, ÑÑо >иÑполÑзÑеÑÑÑ Ð¾Ð´Ð¸Ð½Ð¾ÑнÑй Ñимвол «#». Bash вÑполнÑÐµÑ Ð¿ÑакÑиÑеÑки Ñе же >дейÑÑÐ²Ð¸Ñ — она пÑовеÑÑÐµÑ ÑÐ¾Ñ Ð¶Ðµ Ð½Ð°Ð±Ð¾Ñ Ð¿Ð¾Ð´ÑÑÑок, ÑÑо и в пеÑвом пÑимеÑе, >но ÑбиÑÐ°ÐµÑ Ð½Ðµ ÑамÑÑ Ð´Ð»Ð¸Ð½Ð½ÑÑ, а ÑамÑÑ ÐºÐ¾ÑоÑкÑÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ð¸Ð· пеÑвонаÑалÑной >ÑÑÑоки, и возвÑаÑÐ°ÐµÑ ÑезÑлÑÑаÑ. ÐоÑÑомÑ, как ÑолÑко она обнаÑÑÐ¶Ð¸Ñ >«fo» подÑÑÑокÑ, она ÑбеÑÑÑ ÐµÑ Ð¸Ð· ÑÑÑоки и веÑÐ½ÐµÑ >«odforthought.jpg» ></p> > ><p> >ÐÑÑ ÑÑо Ð¼Ð¾Ð¶ÐµÑ ÐºÐ°Ð·Ð°ÑÑÑÑ Ð·Ð°Ð¿ÑÑаннÑм, поÑÑÐ¾Ð¼Ñ Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ Ðам пÑоÑÑое пÑавило, ÑÑÐ¾Ð±Ñ >запоминаÑÑ, какие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑÑо делаÑÑ. Ðогда иÑеÑе Ñамое длинное Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ, >иÑполÑзÑйÑе ## (поÑколÑÐºÑ ## длиннее, Ñем #). Ðогда иÑеÑе ÑамÑÑ ÐºÐ¾ÑоÑкÑÑ >подÑÑÑÐ¾ÐºÑ — иÑполÑзÑйÑе #. Ðак видиÑе, ÑовÑем не ÑÑÑдно запомниÑÑ! ХоÑÑ >поÑÑойÑе, а как запомниÑÑ Ñо, ÑÑо иÑполÑзование Ñимвола «#» >ознаÑÐ°ÐµÑ Ñдаление Ñ <e>наÑала</e> ÑÑÑоки? ÐлеменÑаÑно! ÐбÑаÑиÑе внимание, ÑÑо >на лаÑинÑкой ÑаÑкладке, «SHIFT+4» ÑвлÑеÑÑÑ Ñимволом >«$», коÑоÑÑй, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, ÑвлÑеÑÑÑ Ñимволом подÑÑановки >пеÑеменной в bash. Ð ÑÑÐ°Ð·Ñ Ñлева Ð¾Ñ «$» Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ «#». >Таким обÑазом «#» Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð¿ÐµÑед «$» и, ÑледоваÑелÑно >(опиÑаÑÑÑ Ð½Ð° наÑÑ Ð¼Ð½ÐµÐ¼Ð¾Ð½Ð¸ÐºÑ), «#» ÑдалÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ñ Ð½Ð°Ñала ÑÑÑоки. >ÐÑ Ð±ÑдеÑе ÑдивленÑ, когда ÑзнаеÑе как ÑдалÑÑÑÑÑ Ð¿Ð¾Ð´ÑÑÑоки Ð¾Ñ ÐºÐ¾Ð½Ñа ÑÑÑоки. >ÐÑли Ð²Ñ Ð¿ÑедполагаеÑе, ÑÑо Ð´Ð»Ñ ÑÑого иÑполÑзÑеÑÑÑ Ñимвол, коÑоÑÑй Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ >ÑпÑава Ð¾Ñ «$» в лаÑинÑкой ÑаÑкладке («%»), Ñо бÑдеÑе >абÑолÑÑно пÑавÑ! ÐÐ¾Ñ Ð¿ÑимеÑ, как ÑбÑаÑÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ñ ÐºÐ¾Ð½Ñа ÑÑÑоки: ></p> > ><pre caption=""> >$ <i>MYFOO="chickensoup.tar.gz"</i> >$ <i>echo ${MYFOO%%.*}</i> >chickensoup >$ <i>echo ${MYFOO%.*}</i> >chickensoup.tar ></pre> > ><p> >Ðак видиÑе, опÑии подÑÑановки пеÑеменнÑÑ % и %% ÑабоÑаÑÑ Ð¸Ð´ÐµÐ½ÑиÑно # и ##, за >иÑклÑÑением Ñого, ÑÑо они ÑдалÑÑÑ ÑовпавÑÑÑ Ð¿Ð¾Ð´ÑÑÑÐ¾ÐºÑ Ñ ÐºÐ¾Ð½Ñа ÑÑÑоки. ÐамеÑÑÑе, >ÑÑо Ðам не нÑжно иÑполÑзоваÑÑ Ñимвол «*» пÑи Ñдалении опÑеделенной >подÑÑÑоки Ñ ÐºÐ¾Ð½Ñа: ></p> > ><pre caption="Удаление подÑÑÑоки Ñ ÐºÐ¾Ð½Ñа"> ><i>MYFOOD="chickensoup"</i> >$ <i>echo ${MYFOOD%%soup}</i> >chicken ></pre> > ><p> >Ð ÑÑом пÑимеÑе не Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениÑ, ÑÑо иÑполÑзоваÑÑ — «%%» или >«%», поÑколÑÐºÑ ÑолÑко одно Ñовпадение возможно. РзапомниÑе: еÑли >запÑÑаеÑеÑÑ Ð² знаÑениÑÑ «#» и «%», Ñо пÑоÑÑо поÑмоÑÑиÑе >на клавиÑи 3, 4, 5 и ÑÑÐ°Ð·Ñ Ð²Ñе поймеÑе. ></p> > ><p> >Ðожно иÑполÑзоваÑÑ ÐµÑе один вид подÑÑановки пеÑеменнÑÑ Ð´Ð»Ñ Ð²ÑбоÑа конкÑеÑной >подÑÑÑоки, оÑнованнÑй на вÑбоÑе ÑмеÑÐµÐ½Ð¸Ñ Ð¾ÑноÑиÑелÑно опÑеделенного Ñимвола и >длинÑ. ÐопÑобÑйÑе набÑаÑÑ Ð² bash ÑледÑÑÑие ÑÑÑоки: ></p> > ><pre caption="ÐÑÐ±Ð¾Ñ Ð¾Ð¿Ñеделенной подÑÑÑоки"> >$ <i>EXCLAIM=cowabunga</i> >$ <i>echo ${EXCLAIM:0:3}</i> >cow >$ <i>echo ${EXCLAIM:3:7}</i> >abunga ></pre> > ><p> >ÐÑÐ¾Ñ ÑпоÑоб ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑÑоки доÑÑаÑоÑно Ñдобен, нÑжно вÑего лиÑÑ Ð¾Ð¿ÑеделиÑÑ >наÑалÑнÑй Ñимвол и Ð´Ð»Ð¸Ð½Ñ Ð¿Ð¾Ð´ÑÑÑоки, ÑазделÑÑ Ð²ÑÑ Ð´Ð²Ð¾ÐµÑоÑиÑми. ></p> > ></body> ></section> ><section> ><title>ÐÑименение ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑÑок</title> ><body> > ><p> >ТепеÑÑ, когда Ð¼Ñ Ð²Ñе знаем о Ñазделении ÑÑÑок, давайÑе напиÑем пÑоÑÑой ÑÑенаÑий >оболоÑки. Ðн бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð² каÑеÑÑве аÑгÑменÑа Ð¸Ð¼Ñ Ñайла и вÑводиÑÑ, ÑвлÑеÑÑÑ >ли ÑÑÐ¾Ñ Ñайл аÑÑ Ð¸Ð²Ð¾Ð¼. ÐÐ»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑого, надо иÑкаÑÑ Ñаблон >«.tar» в конÑе Ñайла. ÐÐ¾Ñ Ð¾Ð½: ></p> > ><pre caption="mytar.sh — пÑоÑÑой ÑÑенаÑий"> >#!/bin/bash > >if [ "${1##*.}" = "tar" ] >then > echo This appears to be a tarball. >else > echo At first glance, this does not appear to be a tarball. >fi ></pre> > ><p> >ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑÑÐ¾Ñ ÑÑенаÑий, ÑÐ¾Ñ ÑаниÑе его в Ñайле Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ><path>mytar.sh</path> и вÑполниÑе <c>chmod 755 mytar.sh</c>, ÑÑÐ¾Ð±Ñ ÑделаÑÑ ÐµÐ³Ð¾ >иÑполнÑемÑм. ÐаÑем запÑÑÑиÑе его, в каÑеÑÑве аÑгÑменÑа иÑполÑзÑÑ ÐºÐ°ÐºÐ¾Ð¹-нибÑÐ´Ñ >аÑÑ Ð¸Ð²: ></p> > ><pre caption="ÐÑовеÑка ÑÑенаÑиÑ"> >$ <i>./mytar.sh thisfile.tar</i> >This appears to be a tarball. >$ <i>./mytar.sh thatfile.gz</i> >At first glance, this does not appear to be a tarball. ></pre> > ><p> >ХоÑÑ Ð¾Ð½ и ÑабоÑаеÑ, но вÑе же ÐµÐ¼Ñ Ð½Ðµ Ñ Ð²Ð°ÑÐ°ÐµÑ ÑÑнкÑионалÑноÑÑи. Ðднако, пеÑед >Ñем, как Ð¼Ñ Ñделаем его более полезнÑм, давайÑе поÑмоÑÑим на вÑÑажение >«if», иÑполÑзованное вÑÑе. ÐнÑÑÑи него ÑаÑполагаеÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкое >вÑÑажение. Ð bash опеÑаÑÐ¾Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ «=» пÑовеÑÑÐµÑ ÑÑÑоки на >ÑавенÑÑво. ÐÑе логиÑеÑкие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² bash заклÑÑаÑÑÑÑ Ð² квадÑаÑнÑе Ñкобки. Ðо >ÑÑо же в наÑем пÑимеÑе пÑовеÑÑÐµÑ Ð²ÑÑажение? ÐавайÑе поÑмоÑÑим на его левÑÑ >ÑаÑÑÑ. Ð ÑооÑвеÑÑÑвии Ñ Ñем, ÑÑо Ð¼Ñ Ð·Ð½Ð°ÐµÐ¼ о Ñазделении ÑÑÑок, >«${1##*.}» оÑÐ´ÐµÐ»Ð¸Ñ Ñамое длинное Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ, ÑовпадаÑÑее Ñ >«*.» Ð¾Ñ Ð½Ð°Ñала ÑÑÑоки, ÑодеÑжаÑейÑÑ Ð² пеÑеменной «1», >и веÑÐ½ÐµÑ ÑезÑлÑÑаÑ. Таким обÑазом, вÑе ÑÑо Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð·Ð° поÑледним Ñимволом "." >в имени Ñайла, бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑено. ÐÑевидно, ÑÑо еÑли Ñайл заканÑиваеÑÑÑ Ð½Ð° >«.tar», Ð¼Ñ Ð¿Ð¾Ð»ÑÑим «tar» в каÑеÑÑве ÑезÑлÑÑаÑа, и >ÑÑловие бÑÐ´ÐµÑ Ð¸ÑÑиннÑм. ></p> > ><p> >ÐÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ ÑмÑÑиÑÑ Ð¿ÑоиÑÑ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ пеÑеменной «1» в Ñамом наÑале >вÑÑажениÑ. Ðднако, вÑе оÑÐµÐ½Ñ Ð¿ÑоÑÑо — $1 ÑвлÑеÑÑÑ Ð¿ÐµÑвÑм аÑгÑменÑом >ÑÑенаÑиÑ, $2 — вÑоÑÑм и Ñ.д. ЧÑо ж, ÑазобÑавÑиÑÑ Ñ Ð»Ð¾Ð³Ð¸ÑеÑким вÑÑажением, >Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑаÑÑмоÑÑеÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¸Ñ «if». ></p> > ></body> ></section> ><section> ><title>ÐÑÑажение if</title> ><body> > ><p> >Ðак и в болÑÑинÑÑве ÑзÑков, в bash еÑÑÑ ÑобÑÑÐ²ÐµÐ½Ð½Ð°Ñ ÑоÑма пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ >ÑÑловнÑÑ Ð²ÑÑажений. Ðогда бÑдеÑе иÑполÑзоваÑÑ ÐµÑ, пÑидеÑживайÑеÑÑ ÑоÑмаÑа, >пÑиведÑнного вÑÑе. То еÑÑÑ ÑÑавÑÑе «if» и «then» на >ÑазнÑе ÑÑÑоки, а «else» и завеÑÑаÑÑий (и обÑзаÑелÑнÑй) >«fi» гоÑизонÑалÑно вÑÑовненнÑми Ñ Ð½Ð¸Ð¼Ð¸. ÐÑо Ð´ÐµÐ»Ð°ÐµÑ ÐºÐ¾Ð´ более >ÑдобнÑм Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ оÑладки. Рдополнение к конÑÑÑÑкÑии «if,else», >еÑÑÑ ÐµÑе неÑколÑко видов вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ «if»: ></p> > ><pre caption="ÐÐ°Ð·Ð¾Ð²Ð°Ñ ÑоÑма вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ if"> >if [ condition ] >then > action >fi ></pre> > ><p> >ÐдеÑÑ Ð´ÐµÐ¹ÑÑвие action бÑÐ´ÐµÑ Ð²Ñполнено ÑолÑко в Ñом ÑлÑÑае, еÑли ÑÑловие >иÑÑинно. РпÑоÑивном ÑлÑÑае ниÑего не бÑÐ´ÐµÑ Ñделано, а вÑполнение ÑÑенаÑÐ¸Ñ >пÑодолжиÑÑÑ Ñо ÑÑÑоки, ÑледÑÑÑей за «fi». ></p> > ><pre caption="ÐÑовеÑка ÑоÑÑоÑÐ½Ð¸Ñ Ð´Ð¾ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´, ÑледÑÑÑÐ¸Ñ Ð·Ð° fi"> >if [ condition ] >then > action >elif [ condition2 ] >then > action2 >. >. >. >elif [ condition3 ] >then > >else > actionx >fi ></pre> > ><p> >ÐÑÐ¸Ð²ÐµÐ´ÐµÐ½Ð½Ð°Ñ Ð²ÑÑе ÑоÑма «elif» бÑÐ´ÐµÑ Ð¿Ð¾ÑледоваÑелÑно пÑовеÑÑÑÑ >каждое ÑÑловие и вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ Ð´ÐµÐ¹ÑÑвие, ÑооÑвеÑÑÑвÑÑÑее пеÑÐ²Ð¾Ð¼Ñ Ð¸ÑÑÐ¸Ð½Ð½Ð¾Ð¼Ñ >вÑÑажениÑ. ÐÑли ÑаковÑÑ Ð½Ðµ окажеÑÑÑ, она запÑÑÑÐ¸Ñ Ð´ÐµÐ¹ÑÑвие, Ð½Ð°Ñ Ð¾Ð´ÑÑееÑÑ Ð² else, >еÑли Ñаковое имееÑÑÑ, а заÑем пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ Ð²Ñполнение Ñо ÑÑÑоки, ÑледÑÑÑей поÑле >вÑего вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ «if,elif,else». ></p> > ></body> ></section> ><section> ><title>ЧÑо далÑÑе?</title> ><body> > ><p> >ТепеÑÑ, когда Ð¼Ñ ÑаÑÑмоÑÑели базовÑÑ ÑÑнкÑионалÑноÑÑÑ bash, Ñамое вÑÐµÐ¼Ñ >ÑобÑаÑÑÑÑ Ñ Ñилами и бÑÑÑ Ð³Ð¾ÑовÑми ÑоздаÑÑ Ð½ÐµÑколÑко наÑÑоÑÑÐ¸Ñ ÑÑенаÑиев. Ð >ÑледÑÑÑей ÑÑаÑÑе бÑдÑÑ Ð¾Ð±ÑÑÑÐ½ÐµÐ½Ñ ÑиклÑ, ÑÑнкÑии, пÑоÑÑÑанÑÑва имен и дÑÑгие >важнÑе ÑемÑ. Тогда Ð¼Ñ Ð±Ñдем гоÑÐ¾Ð²Ñ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑе веÑи. Ð ÑÑеÑÑей >ÑÑаÑÑе Ð¼Ñ ÑконÑенÑÑиÑÑемÑÑ Ð½Ð° доÑÑаÑоÑно ÑложнÑÑ ÑÑенаÑиÑÑ Ð¸ ÑÑнкÑиÑÑ , а Ñакже >на некоÑоÑÑÑ Ð²Ð°ÑианÑÐ°Ñ ÑазÑабоÑки в bash. Ðо вÑÑÑеÑи! ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Resources</title> ><section> ><title>Useful links</title> ><body> > ><ul> > <li> > Read <uri > link="http://www.gentoo.org/doc/en/articles/bash-by-example-p2.xml">Bash by > example: Part 2</uri>. > </li> > <li> > Read <uri > link="http://www.gentoo.org/doc/en/articles/bash-by-example-p3.xml">Bash by > example: Part 3</uri>. > </li> > <li> > Visit <uri link="http://www.gnu.org/software/bash/bash.html">GNU's bash home > page</uri> > </li> ></ul> > ></body> ></section> ></chapter> ></guide> > ><!-- *$Localization: >target-language: Russian >target-version: 1.3-r1 >target-date: 2007-08-07 >translated-by: Sergey Sychev >edited-by: >notes: >-->
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 187935
: 127115