ПредишенСледващото

Основи на програмирането в Баш

Все още не трябва да си представя защо трябва да се научите програмиране в Баш. Ето няколко причини:

Баш вече е в системата ви

Ако проверите. най-вероятно ще откриете, че Баш вече работи на вашата система. Дори ако използвате различен корпус като черупка, Баш определен набор, тъй като тя е стандарт в командния в Linux. Защото Баш вече работи, изпълнение на скриптове, написани на Баш-е е ефективен, тъй като те споделят част от RAM вече е стартиран процес Баш. И защо да изтеглите друг преводач, ако вече имате Баш, който си върши работата и го прави добре?

Вече сте го използвате

Но не само Баш работи на вашата система, която взаимодейства с тях всеки ден. Той е винаги там, така че има смисъл да се научат как да се справят с тях, за да се възползват напълно от всички свои възможности. След това, комуникацията си с Linux ще стане по-забавно и продуктивни. Но защо трябва да се научите да програмирате? Това е проста: трябва да се мисли от гледна точка на ефективността на програмите, копиране на файлове и програми изход за пренасочване. Смятате ли, сега трябва да научат езика, който ще ви даде възможност да се изгради тези прости елементи са мощни и спестяване на времето си структури, с които сте запознати? Черупката отваря на пълния потенциал на вашия UNIX. Баш е Linux черупка. Той ви свързва с вашия компютър. След като се запознах Баш, можете автоматично да увеличите производителността си с помощта на UNIX или Linux - всичко е толкова лесно.

преди да започнете

Баш грешен подход към изучаването на език може да ви обърка. Много начинаещи се въвеждат мъж Баш команда, за да прочетете на страницата Често задавани въпроси, която съдържа само кратко техническо описание на функционалността черупка. Други наричат ​​информация Баш (за да видите документация на информация формат), но да получат една и съща страница или инструкцията или малко по-лесен за употреба материал.

Начинаещите могат да бъдат разочаровани да научат, че стандартните източници не може да предостави цялата информация, и е предназначен за потребители, които вече са запознати с основите на програмирането в черупка. В ръководството са много голям организираната техническа информация, но за начинаещи като се радва малки.

Тази серия от статии ще ви помогне да свикне с командния ред. Този урок е описано как да се използва основния синтаксис черупка дизайнерски език за писане на скриптове. Ще се опитам да обясня всичко на прост език, така че не само да разбере как всичко това работи, но измисли как да го използвате. След като прочетете тази поредица от статии, ще се научите как да пишат свои собствени сценарии и ще се чувствате комфортно в командния ред. След това ще бъде в състояние да попълни своите знания чрез четене (и разбиране!) Стандартната документацията за Баш. Нека да започнем.

променливи

Променлива в Bash-д може да бъде определена по следния метод:

$ Myvar = 'Това е моят променливи! "

Тази команда създава променлива, наречена "myvar", който съдържа ред "Това е моят променливи!". Трябва да се отбележи, че: На първо място, в непосредствена близост до "=" не може да съдържа интервали; (Опитайте и вие ще видите, че в отбор с интервали преводач произвежда грешка). На второ място, ако стойността на нашата променлива съдържа интервали или табулации, приложете го в кавички.

Забележка: За повече информация относно използването на кавички в Bash, вижте "цитира" на човек Баш страница. Наличието на специални последователности от символи, че преводачът заменени с други средства, прави обяснение на низ в Баш твърде сложно. Ето защо, ние ще кажа само най-често използваните методи за цитиране.

На трето място, обикновено можете да използвате двойни кавички, вместо единични, но в този пример, използването на двойни кавички ще предизвика грешка на преводача, тъй като стойността на нашата променлива съдържа една от най-специалните символи (от които по-горе, посочена в бележката) - но вътре в "!" единични кавички, без специални символи не работят. "!" Герой в Баш е отговорен за така наречената "ИСТОРИЯ експанзия" - работа с историята на файла команден ред (виж подробности в ръководството.). На гледа на факта, че функцията работи с история на команди чрез "!" Може да бъде много полезен точно сега искаме да го видим просто като удивителен знак.

Нека видим как можете да прочетете на стойността на нашата променлива:

$ Echo $ myvar Това е моят променливи!

Поставянето на променлив знак име $. да кажем, че преводачът трябва да бъдат заменени от стойността си. Това се нарича променлива заместване (заместване променлива / разширяване).

Трябва да се отбележи, че имената на променливи в Баш чувствителни. Например, myvar и MyVar - имената на различните променливи.

Но какво се случва, ако се опитаме да го направите:

$ Echo Foo $ myvarbar Foo

Искахме да се покаже надписа "fooEto моята среда променлива! Bar", но нищо не се е случило. Какво се случи? Преводачът не е в състояние да се определи стойността на името на променливата трябва да бъде заместен ($ m, $ ми, $ myvar, $ myvarbar и т.н.) В такива неясни случаи, можете да укажете в Баш името на променливата:

$ Echo Foo $ бар fooEto ми променливи! Bar

Както можете да видите, като въведете името на желания променлива в скоби, ние ясно посочено, където преводачът е променлива и къде прост текст. Изразяване $ myvar е по-бързо, за да напишете и работи в повечето случаи, но $ винаги да работи коректно. И двете от тези изрази се посочи една променлива, но трябва да се използва втори (с тиранти), ако името на променливата не е отделена от околния текст с интервали или раздела знаци.

Да се ​​върнем към споменатия контакт за износ на променливи. Изнесеното променлива автоматично става достъпна за всеки скрипт или програма, която стартира след износа. Shell-скрипт може да се прочете стойността на променливата с помощта на вградения в черупката на работа с променливи на обкръжението, както и програмата на C - използване getenv (функция). Ето един малък пример за код на езика C, които можете да отпечатате и събират. Той помага да се погледне на околната среда променливи от C:

Запази този код във файл myenv.c. и след това се събират:

$ ССЗ myenv.c -o myenv

След това, с изпълним "myenv" файла ще се появи в мотивите Докато работи директория. Пусни го, и тя ще ви донесе променлива стойност "на редактора (ако има такъв). Тук е моят резултат:

$ ./myenv променлива редактор среда е настроен на (нула)

Тъй като променливата не е определена, нашият софтуер не може да го получи. Нека създадем променлива и да го зададете някаква стойност:

$ РЕДАКТОР = подложка $ ./myenv променлива редактор среда е настроен на (нула)

Така че, също не работи. Ние очакваме, че програмата ще отпечата "подложка", но резултатът не се промени. Това се случи, защото сме забравили да изнася променливата "на редактора. По това време тя трябва да работи:

$ Износ РЕДАКТОР $ ./myenv променлива редактор среда е настроен на Подложка за мишка

Така че, ние имаме примера убеден, че аспекти на процеса (в този случай по-C програма) нямат достъп до променливата на средата, докато тя не се изнася. В допълнение, можете да дефинирате променлива и да го експортирате в екип:

Тази команда изпълнява същото действие като два етапа версия (присвояване на стойност и износ). Най-подходящото време да се покаже как да нулирате стойността на променлива на средата (с други думи - да се премахне една променлива) с помощта на "изключено":

$ Unset РЕДАКТОР $ ./myenv променлива редактор среда е настроен на (нула)

Как да се направи разбор на низ?

_Аналитична низ - това означава да се раздели на по-малки части. Това е една от най-честите операции, които се случват, когато пишете черупки-скриптове. Понякога трябва скрипт, за да се определи името на даден файл или директория, знаейки (абсолютен) път. В Баш можете да го направите всичко с една команда:

$ Basename /usr/local/share/doc/foo/foo.txt foo.txt $ basename / ЮЕсАр / начало / drobbins drobbins

"Basename" - много удобна програма за разделяне на низове в компоненти. Вторият отбор - "dirname" - връща друга част на линията (пътя до директорията, където се намира файла):

$ Dirname /usr/local/share/doc/foo/foo.txt / ЮЕсАр / местни / акции / док / Foo $ dirname / ЮЕсАр / Начало / drobbins / / ЮЕсАр / дома

Забележка. Екип на "basename" и "dirname" не може да открие наличието на файл или директория във файловата система, и работи само с низове.

команда смяна

Много е полезно да се знае как да се създаде променлива към изхода от команда. Направете го доста проста:

$ MYDIR = $ (dirname /usr/local/share/doc/foo/foo.txt) $ ехо $ MYDIR / ЮЕсАр / местни / акции / док / Foo

Това, което направихме, е наречен команда смяна. В първия ред на примера, който току що завърши с екип в изграждането на $ ().

Имайте предвид, че едно и също нещо може да се направи, вместо да кандидатствам дизайн $ () обратен апостроф `` (клавиатура ключ точно над ключа Tab):

$ MYDIR = `dirname / ЮЕсАр / местни / акции / док / Foo / foo.txt` $ ехо $ MYDIR / ЮЕсАр / местни / акции / док / Foo

В Баче, както видяхме, е възможно да се направи едно действие по няколко различни начина. Използване на команда смяна, можем да поставим всяка команда в backquotes, или в изграждането на $ () и я възлага на изходната променлива. Много полезно нещо! Ето един пример за това как да се използва за замяна и последователно свързани през тръбата:

$ MYFILES = $ (LS -1 / и т.н. | Впиши ^ па) $ ехо $ MYFILES pam.conf pam.d Панго papersize ако съществува passwd-

$ MYFILES = $ (LS $ (dirname Фу / бар / Они))

Разделяне на линии за професионалисти

"Basename" и чудесно средство "dirname", но има моменти, когато трябва да се изпълняват по-сложни операции на низове от манипулирането на начина. За по-ефективна работа низ може да се използва вградения в замяна на променливите Баш. Ние преди това сте използвали променливите за замяна, които изглеждат така: $. Но в Баш и има вградена низове. Нека разгледаме следния пример:

$ MYVAR = foodforthought.jpg $ ехо $ rthought.jpg $ ехо $ odforthought.jpg

Какво означава изграждането на $ от предишния пример? Ние пише в $<> името на променливата, следван от две хеш марка (или хашиш марка, тъй като всеки, който обичайно) и модел ( "* FO"). Баш пое нашата променлива "MYVAR", намерен по-голямата част от дължината на низа на подниза "foodforthought.jpg" (от началото на реда), който съвпадна с модела "* FO" и го изтрива. От първи път в тези тънкости, трудни за разбиране. За да се разбере как работи ## дизайна. нека да разгледаме стъпка по стъпка как да тряскам външен вид за подниз съвпадение на модела. Започнете да търсите за подниз съвпадение модел "* FO" от началото на низ "foodforthought.jpg". Ето списък на всички такива подниз:

е FO съвпада с модела "* FO" Foo храна foodf foodfo съвпада с модела "* FO" foodfor foodfort foodforth foodfortho foodforthou foodforthoug foodforthought foodforthought.j foodforthought.jp foodforthought.jpg

След проверка на всички тези опции, намерени двете линии, попадаща в шаблона. Баш избира най-дългата от тях, а след това ще изтрие поднизът и връща резултата.

Втората форма на променливата заместването в примера, показан различава от първия само в присъствието на знак хеш (#), вместо два. И Баш следва същата процедура, само че не премахва най-дългата и най-краткия поднизът съчетана с шаблона. Както може да се види, след отстраняването на най-краткия поднизът съвпадащи с шаблон (FO) ни остава низа "odforthought.jpg".

Това може да изглежда много объркващо, така че аз ще ви покажа как можете бързо да си спомня тази функция Баш. Когато погледнем за най-дълъг мач, а след това ние използваме две хеш (##), както е "##" е по-дълъг от "#". И когато търсите най-краткия мач, използвайте #. Виж, не е толкова трудно! Чакай, как да се помни, че търсенето ще започне от началото на линията? Много просто! Имайте предвид, че комбинация Shift-4 ни дава знак $ се използва в Баш за замяната на стойността на променливата в клавиатурната подредба на английски език. Точно преди знака на клавиатурата е $ # (като че ли в началото) и така "#" премахва герои от началото на линията. Искате да знаете как да изтриете поредица от символи от края на линията. Както можете да предположите, това се прави с помощта на знака (%), който се намира на клавиатурата веднага след "$". Ето един малък пример за края на отстраняване на линия:

$ MYFOO = "chickensoup.tar.gz" $ ехо $ chickensoup $ ехо $ chickensoup.tar

Както можете да видите, единични и двойни знаци за процент (%% и%) също работят като "#" и "##", но премахват поднизът съвпадащи с шаблон от края на линията. Не забравяйте, че вие ​​не можете да използвате "*", ако искате да изтриете някои специфични край на линията.

В този пример, няма разлика или %%% употреба, тъй като има само един мач. И не забравяйте, когато "#" или "%", за да разгледаме 3.4 и 5 клавиши на клавиатурата.

Ние можем да използваме друга форма на заместване на стойността на променливата за извличане подниз от дадена дължина и изходна позиция:

Тази форма е много удобно. Трябва само да въведете разделени от двоеточие започне позиция на подниза - първото число, а дължината на подниза - второто число.

Прилагане на разделяне линии

линии на разделение са се научили, нека да напише една малка черупка-скрипт. Нашият сценарий ще приеме единствен аргумент - името на файла и ако файлът е с разширение .tar, скриптът ще докладва, че този архив, който. (Всъщност се определи вида на файла, за да се разшири не е правилна за тази цел има команда файл Пример за демонстрационни цели само ...) Ето сценария:

#! / Bin / Баш ако [ "$" = "катран"] след това ехо "Изглежда този архив, който". друго ехо "На пръв поглед, това не е като архив, който". Fi

Първият ред трябва задължително да присъстват във всеки сценарий. Тя показва пътя на преводача, който ще изпълнява сценария. Синтаксисът е както е показано в примера - "#!<путь к интерпретатору>".

Запазване на текст скрипт от примера в mytar.sh файл. след това да промените правата за достъп, за да го "CHMOD 755 mytar.sh" (това ще направи изпълнимия файл). И накрая, стартирайте скрипта с аргумента като име на файла, както е показано в следния пример:

$ ./mytar.sh thisfile.tar мисля, че това архив, който. $ ./mytar.sh thatfile.gz На пръв поглед, това не е като архив, който.

Е, нещо като тя работи, но не е много функционален. Преди да подобрим нашия скрипт, ако вземем предвид дизайна. използваните в него. Скобите са сравнени с две линии ( "=" - оператор сравнение в Bash). Резултатът от сравнението - булева израз "фалшиви" или "истински" (вярно или невярно). Но нека да видим какви струни се сравняват. Вдясно е ясно - линия "катран". От ляво на нас е да се разбере по-горе израз, премахва горната част на линията в $ 1 на модела ". *" (The целия ред до последната точка, тъй като се използва за две хеш ##). След тази операция, заместването е само част от линията след последната точка - с други думи разширение. Ако променливата $ 1 съдържа името на файла с разширение "катран", в резултат на сравнение низ ще бъде Булева вярно.

Вие вероятно се чудите защо при проверка на условията, ние използвахме променливата "$ 1". Това е много проста: променливата $ 1 съдържа в първия аргумент сценария ($ 2 - вторият аргумент, и така нататък). С тази функция се разбира, нека сега разгледаме по дизайн избор условно "ако".

ИИ

Както и при много езици за програмиране, Баш има условни. Те имат формата, описан по-долу. Бъдете внимателни: думите "ако" и "след това" трябва да са на отделни редове. Опитайте се да се приведе в съответствие хоризонтално цялата структура, включително и окончателното "Fi" и всички "друго". Това прави кода много по-лесно да се чете и отстраняване на грешки. В допълнение към по-проста форма на "ако друго", има няколко други форми на условностите:

ако [условие] след това действие Fi

В примера по-горе, "действие" се изпълнява само ако "състояние" е вярно, в противен случай сценарият продължава да изпълнява инструкции с линия става за "фантастична".

ако [Условия] след това действие Елиф [uslovie_2] след Action_2 Елиф [uslovie_3] след това. останало deystvie_x Fi

И това строителство последователно проверява състоянието и ако е истина, след това да извършите съответното действие. Ако нито едно от условията не е вярно, то тогава "deystvie_x" идва след "друго" (ако има такъв). След това продължава изпълнението на команди идват за тази конструкция ", ако тогава, друго", ако има такива.

В следващата част

В тази статия, ние погледна с основните функции на Баш. Това е време, за да се ускори малко и да започне да пише свои собствени шел-скриптове. В следващата част на книгата говоря за функциите, цикли, пространство от имена, както и други важни неща. След това, ние ще бъдем готови да пиша относително сложни скриптове. Ще се видим там!

виж също

Свързани статии

Подкрепете проекта - споделете линка, благодаря!