Ренесанс

Ренесансът, което означава "раждане отново", е всъщност възраждане на идеята за човека. Настъпила коренна промяна в представата за човека, която го поставила в центъра на всичко, промяна, която се отразила в изкуството. Ренесансът се заражда през 14 век и обхваща периода до началото на 16 век. За да го разберем, трябва да разгледаме събитията, довели до неговото развитие, особено предшестващата го средновековна философия и теология. Произведенията на гръцките и римските мислители били достъпни за прочит, тъй като били пазени, четени и дискутирани от средновековните интелектуалци.
Може да се каже, че Тома Аквински (1225 - 1274) най- известният представител на църковната схоластика, посял семената на Ренесанса. Той вярвал, че човекът въстанал срещу Бога и паднал, но неговата представа за падението била непълна. Мислел, че падението не засегнало човека като цяло, била покварена само волята му, но не и интелектът. Така хората можели да разчитат на собствената си мъдрост, следователно, спокойно можели да смесват ученията на Библията с ученията на философите- нехристияни.
Тома Аквински се опирал на един от най- изявените гръцки философи- Аристотел (384 - 322 г. пр. Хр.). Това подготвило почвата за появата на хуманистичните елементи на Ренесанса. "Най-важното нещо за човека е самият той" - била доминиращата мисъл. Това е хуманизмът (човекът в центъра на всичко). Какви биха били основите на морала, на ценностната система и на закона при този начин на мислене? Хуманизмът не може да предложи стандарт, според който човек да сравнява всичко или да осмисли битието и морала. Така животът става безсмислен.
В мисленето на Тома Аквински имало и положителни елементи, които скоро се отразили в изкуството. На света и на мястото на човека в света, вече се отдавало по- голямо значение. Преди Джото (1267 - 1337) италианското изкуство представлявало един по- груб вариант на византийското- било плоско и без художествена перспектива. С Джото настъпва коренна промяна. В неговото изкуство природата заела съответното си място и изобразяваните от него персонажи били по- реалистични, пластични и обемни, по- близки до живота. Щом Бог е създал света, значи природата е важна- и затова тя се изобразявала такава каквато е в действителност.
За съжаление, отрицателните хуманистични идеи на Аквински били доразвити по- нататък. Например, писателят Данте (1265 - 1321) използвал алюзии, за да вмества класическия езически свят в своите произведения. В творбата си" Божествена комедия" той представя римския поет Вергилий като символ на човешката мъдрост и го взема за свой водач през кръговете на ада. Други писатели също последвали школата на Данте- например Петрарка (1304 - 1374) който с право е назован "баща на новия хуманизъм". Той бил вдъхновяван от класическите римски писатели като Цицерон и питаел дълбока любов към древния Рим. Бокачо (1313 - 1375) превел Омир, който станал един от крайъгълните камъни на Ренесанса. Възраждала се античната литературна традиция.
От Петрарка водят началото си редица хуманисти. Техният хуманизъм включва благоговение пред всичко антично, особено пред литературата от гръцката и римската епоха. Влечението към нехристиянските гръцки и римски класици по- късно било стимулирано от падането на Константинопол през 1453 г., в резултат на което мнозина учени от Византия избягали и донесли ръкописите си в Италия. Така ренесансовият хуманизъм постепенно се развил до модерен хуманизъм- една система от ценности, вкоренена във вярването, че човек е критерий сам за себе си, че човек е независим, абсолютно самостоятелен, той е мярката за всички неща.
През 15 век в архитектурата настъпва обрат- в пълна противоположност на мрачната Готика израства архитектурата на хуманизма, възродена Класика, с присъщите и ритъм и пропорции, създаваща усещане за простор и светлина. Това става по времето на Брунелески (1377 - 1446). Следващите архитекти от Ренесанса наблягат на простите геометрични форми- кръг и квадрат. Перспективата направила възможно изобразяването на пространството по нов начин. Но за хората от Ренесанса новото виждане за перспектива било още нещо: тя поставяла човека в центъра на това пространство!
Мазачо (1401 - 1428) бил наречен баща на ренесансовата живопис. Той изучавал живота и можел да придаде на картините си реалистичен облик, като отделя централно място на природата. Той бил първият художник, използвал централна перспектива и рисувал картините си с естествено осветяване на обектите. Пръв започва да изобразява и реални хора в реален свят. Персонажите му излъчват жизненост, те се ръководят от християнската любов към ближния - апостол Петър върви и сянката му изцелява болните. За съжаление, след Мазачо взел превес хуманизмът- човекът става все по- независим и самостоятелен. Междувременно, нещата, които осмисляли човешкия живот все повече намалявали.
Почти до края на живота си Микеланжело (1475 - 1564) бил под влиянието на хуманистичното мислене. Статуите му на хора "откъсващи се от скалата" изобразяват човека, който се изтръгва от природата, за да се освободи. Човекът ще победи! Великолепната статуя на Давид (1504 г.) показва хуманистичния идеал - Човекът е съвършен, най- висшето творение на природата! Въпреки че бил запознат с Писанията и обредите на Израел, Микеланжело изобразява юдейския цар необрязан, което за евреите би означавало нарушаване на завета с Бога и Неговия закон. Това изразява ренесансовото отстъпничество от Бога и издигането на човека.
Другата значима фигура от Ренесанса е Леонардо да Винчи (1452 - 1519), химик, инженер и художник. Той бил олицетворение на ренесансовия човек: можел да прави почти всичко и то добре. Хуманистите били убедени, че човекът може да реши всеки проблем със собствени сили. Съществувала пълна вяра в човека. Но в края на живота си Леонардо успял да прозре близкия провал на хуманизма, чиито признаци вече предсказвали естествения му завършек- песимизмът.
Етапи:
· Ранен Ренесанс 1420 - 1500 г. - Флоренция, Тоскана с представители Филипо Брунелески, Леон Батиста Алберти, Донатело, Мазачо и др.
· Зрял Ренесанс (разцвет на Ренесанса) 1500 - 1540 г.- Флоренция, Рим, Венеция с представители Донато Браманте, Леонардо да Винчи, Микеланджело Буонароти, Рафаело.
· Късен Ренесанс 16 век - Андреа Паладио, Джорджоне, Тициан, Паоло Калиари Веронезе.
Ренесансът е течение на обновление и реформация в науката, изкуството и политическия живот, което първоначално възниква в Италия (14 век) и по късно в другите европейски държави (15 век). Нарича се преломна епоха, защото в този период общественото и културното развитие на европейските страни излиза от средновековието и се формират характерните черти на съвременната европейска цивилизация. Терминът Ренесанс - възраждане е възприет за означаване на засиления интерес към античността, но с нагласата за новаторство. В изключително динамичния период – 13 век, се зараждат специфични обществено - стопански отношения, оформя се буржоазията и интелигенцията. Това е периода на революционни постижения. Приносите на Леонардо да Винчи, Николай Коперник, Галилео Галилей, Парацелз и други бележити учени оставят ясна следа и предопределят множество пътища на развитие в науката и изкуството. Превратни за обществото са книгопечатането, новите източници на енергия, великите географски открития, изобретяването и усъвършенстването на огнестрелното оръжие и др. Това е и периодът, в който Европа става водеща сила в икономическото, политическото и културното отношение.
Леонардо да Винчи (15 април 1452 — 2 май 1519) е знаменит италиански архитект, изобретател, инженер, скулптор и художник от епохата на Ренесанса. За него се казва, че е първообраз на ренесансовия човек и всеобхватен гений. Леонардо е прочут заради картините си, най-известните от които са „Тайната вечеря“ и „Мона Лиза“. Той е известен и заради многобройните си изобретения, изпреварили времето си, но останали само на хартия. Допринесъл също така за развитието на анатомията, астрономията и инженерството.
Микеланджело ди Лудовико Буонароти Симони, известен още само като Микеланджело, е италиански ренесансов художник, скулптор, поет и архитект, представител на Флорентинската школа. Смятан е за един от тримата титани на Ренесансовото изкуство заедно с Леонардо да Винчи и Рафаело. Творчеството на Микеланджело се отличава с патос, в него присъстват идеалите на епохата за физическа и духовна мощ и трагизъм, характерен за периода на късния Ренесанс. То оказва силно влияние върху Тициан и венецианската живопис и се смята за основа на стила маниеризъм.
Рафаело Санцио (или Рафаело Санти) е италиански художник и архитект от Флорентинската школа. Той твори през Високия Ренесанс, който обхваща периода от самия край на 15 век до първите години на 16 век. Въпреки краткия му живот Рафаело оставя след себе си огромно живописно наследство. Още по свое време той се прочува като „художник на Мадони”, голяма слава му донасят и неговите фрески в станците на Ватикана. В наше време Рафаело е смятан за един от тримата големи художници на Ренесанса, заедно с Микеланджело и Леонардо да Винчи.
Промените в културата, литературата и изкуствата не отстъпва на промените в стопанския отрасъл. Творчеството през ренесанса е със светски и хуманистичен характер, а самите творци изоставят теоцентричните възгледи, и изобразяват човека като реално земно същество.
Ренесансът в литературата започва с Данте, продължава с Петрарка, Джовани Бокачо, Лудовико Ариосто, Торкуато Тасо. Западноевропейската литература се развива под влияние на италианския Ренесанс и на научните открития и достигат апогей в творчеството на Лопе де Вега, Мигел де Сервантес, Уилям Шекспир, Франсоа Рабле.
Данте Алигиери е италиански поет от град Флоренция. Неговото най-прочуто произведение е „Божествена комедия“ („La Divina Commedia“), връхна точка в развитието на средновековната литература и основополагаща за развитието на съвременния италиански език.
Мигел де Сервантес Сааведра (1547 – 1616) е испански романист, драматург и поет, считан от много литературни критици и анализатори за най-великия испански автор. Неговият роман Дон Кихот (част I излиза през 1605 г., а част II — през 1615 г.) се приема за един от най-големите шедьоври на световната литература. Заради своя увлекателен стил и тънка проницателност Сервантес придобива известност, сравнима с тази на гръцкия рапсод Омир, италианския поет Данте Алигиери и английския драматург Уилям Шекспир.
Уилям Шекспир (1564-1616), знаменитият английски драматург и поет, признат в Западната култура като най-значимия писател в англоезичната литература. Шекспир е от малкото драматурзи, които се отличават в писането както на трагедии, така и на комедии. Способността на му да улавя и предава най-дълбоките аспекти от човешката природа дават право на мнозина да го смятат за ненадминат талант, а Английския ренесанс често е наричан „шекспиров период“.
Дълбок прелом е извършен през Ренесанса и в театъра, музиката и сродните изкуства.
Ренесанса в архитектурата започва от 1420 г. и продължава до средата на 16 век , преминавайки през проторенесанса (началото на Ренесанса в архитектурата през 13-14 век) с обособяването на Сиенска школа, Джото и др. В строителството се акцентира предимно на обществени сгради, дворци, градски къщи и др. от светски характер. Характерни са ордерното разчленяване на стенните плоскости, аркадите, колонадите, сводовете, куполите, логическата съразмерност, хармоничността и ясната тектоника, основани на законите на перспективата и пропорциите. Това е период за силно развитие на градоустройството. Създават се мащабни архитектурни ансамбли, подчинени на цялостен художествен замисъл.
През ренесанса се развива също и астрологията. Много италиански градове през този период имат на служба официални астролози. Един от най-известните от тях е Бласиус от Парма (ок. 1315-1416) . Той е бил изтъкнат учен, преподавател в няколко университета.
Шестнадесети век бележи развитие на астрологията и в други европейски страни, което се стимулира от разпространението на печатното слово, от културата на Ренесанса и нарасналия брой на университетите в Европа.
В Чехия твори Киприан Леовитий (1524-1574) - един от най-известните астролози на своето време.
През 1500г. унгарският крал Матиаш Корвински основава Пресбургския университет в днешна Братислава, който става известен благодарение на своите специалисти по астрология, но за съжаление се налага да бъде закрит поради войната с турците.
През 1450 г. полският учен Мартин Крул основава катедра по астрология в университета в Краков, а най-известният по това време полски астролог е Мартин Билица (1433-1493).
Визитата в Англия през 1553 г. на големия италиански учен и астролог Джеронимо Кардан (1501-1576) във връзка с изготвянето на хороскопа на младия крал Едуард VI, оказва огромен стимул върху развитието на английската астрология. Тя се използва на всички равнища - за пропаганда, за поддържане на теологията и политическата идеология и най-вече за консултиране на политическите лидери в тяхната борба за властта. Най-известният английски астролог от това време е Уйлям Лили (1602-1681).
По това време в Италия творят няколко големи астролози. Лука Гаурик (1476-1558) предсказва на Александро Фарнезе, че ще стане папа. Когато той става папа не само го възнаграждава богато, но и му дава епископска титла. Джовани Маджини (1555-1617), професор по математика в университета в Болоня и член на комисията за смяна на календара към папа Григорий XIII.
Трайно място заема астрологията и в Германия. Големите учени Тихо Брахе и Йохан Кеплер са известни повече със своите астрономически наблюдения, но и двамата са практикуващи астролози.
Във Франция най-голяма е известността на Нострадамус (1503-1566). Той става личен лекар на крал Карл IX, а от съветите му се възползва и Катерина Медичи. Но най-вече той е известен със своите “Центурии”, популярни предсказания, които се радват на голяма популярност и в наши дни.
Ренесансови школи:
· Флорентинска школа
· Венецианска школа
Музиката през Ренесанса:
Ренесанс („възраждане”) е един период в изкуството, в който се слага голямо ударение върху човека. В началото на този период, реалният човек и природа били „върнати” обратно в изкуството, което довело до появата на много красиви произведения. Но вместо да представят хората, живеещи в реалния свят, сътворен от Бог, голяма част от творците избрали да представят човека като център на света - независим от своя Създател. Постепенно, светската музика засилила влиянието си. Църковната музика също се променяла.
През Ренесанса, аристократичните дворове започнали да подпомагат изкуствата и особено музиката. С изобретяването на печатарската машина от Гутенберг, за първи път музиката започнала да се печата, което също спомогнало за нейното разпространение.
Светската музика изобилствала с песни за любовта, чиито автори били познати като трубадури (в Южна Франция), трувери (в Северна Франция) и минезингери (в Германия). Въпреки, че днес хората мислят, че трубадурите са били бедни, това не винаги е било така. Често пъти те са имали благородническо потекло, но трубадур е можел да стане всеки, който можел да научи и да спазва нравите и идеалите на любовта, която била възпявана. Дрорцовите песни се разпространили из цяла Европа. Трубадурите, които пишели стиховете, обикновено не ги изпълнявали. Те наемали жонгльори (бардове, минстрели) - пътуващи певци, които изпълнявали песните в различни замъци.
Въпреки, че грегорианските песнопения са били единствената музика в църквите през ранното Средновековие, не е било възможно тази проста форма да се задържи за дълго време. Най-ранните форми на полифонията (повече музикални линии или гласове) била наречена органум. Той е представлявал проста мелодия, към която композиторът или певецът е добавял още една, но на друг глас.
В началото, хармонията се е движела на някакво разстояние от основната мелодия – на около 4-5 ноти над или под нея. По-късно, хармонията става по-независима - понякога отивала нагоре, докато мелодията тръгвала надолу или обратно. Били добавени повече ноти – няколко ноти се изпявали докато траела една нота на основната мелодия. По-късно се добавили две хармонични линии, чиято цел била да произведат по-приятен звук. Ритъмът станал по-структуриран, с повече от един повтарящ се удар, наподобяващ ритъма с който сме свикнали днес.
Композиторите на Ренесанса въвели оркестъра, в който всеки инструмент имал различен глас и изпълнява различна музикална линия. Някои от най-използваните инструменти през този период били лютнята, тромбона, виелата, арфата и клавесина.


Писане на скриптове за BASH шел

Тази статия е преведена с разрешението на автора и X_console.
Адресът на оригиналната статия е .
Както всички шелове, които може да намерите за Linux BASH (Bourne Again SHell) е не само отличен команден интерпретатор, но и език за писане на скриптове. Шел (Shell) скриптовете позволяват максимално да използвате възможностите на шел интерпретатора и да автоматизирате множество задачи. Много от програмите, които може да намерите за Linux в последно време, са шел скриптове. Ако искате да разберете как те работят или как може да ги редактирате е важно да разбирате синтаксиса и семантиката на BASH шела. В допълнение познаването на bash езика позволява да напишете ваши собствени програми, които да изпълняват точно това, което искате.
Програмиране или писане на скриптове?
Хората, които до сега не са се занимавали с програмиране, обикновено не разбират разликата между програмен и скрипт език. Програмните езици обикновено са по-мощни и по-бързи от скрипт езиците. Примери за програмни езици са C, C++, и Java. Програмите, които се пишат на тези езици, обикновено започват от изходен код (source code) – текст, който съдържа инструкции за това как окончателната програма трябва да работи, след което се компилират до изпълним файл. Тези изпълними файлове не могат лесно да бъдат адаптирани за различни операционни системи (ОС). Например, ако сте написали програма на C за Linux, изпълнимият файл няма да тръгне под Windows 98. За да можете да я използвате тази програма се налага да прекомпилирате изходния код под Windows 98. Скриптовете (програмите писани на скрипт езици) също започват от изходен, но не се компилират в изпълними файлове. При тях се използва интерпретатор, който чете инструкциите от изходния код и ги изпълнява. За жалост, поради това че интерпретатора трябва да прочете всяка команда преди да я изпълни, интерпретираните програми вървят като цяло по-бавно спрямо компилираните. Основното предимство на скриптовете е, че лесно могат да бъдат пренаписани за други ОС стига да има интерпретатор за тази ОС. bash е скрипт език. Той е идеален за малки програми. Други скрипт езици са Perl, Lisp, и Tcl.
Какво искате да знаете?
Писането на собствени шел скриптове изисква да знаете най-основните команди на Linux. Трябва да знаете например как да копирате, местите или създавате нови файлове. Едно от нещата, които е задължително да знаете е, как да работите с текстов редактор. За Linux има множество текстови редактори, най-разпространените от които са vi, emacs, pico, mcedit.
Внимание!!!
Не се упражнявайте в писане на скриптове като root потребител! Не се знае какво може да се случи! Имайте това в предвид! За упражненията използвайте нормален потребител без права на root.
Вашият първи BASH скрипт
Първият скрипт, който ще напишете, е класическата "Hello World" програма. Тази програма изпечатва единствено думите "Hello World" на екрана. Отворете любимия си текстов редактор и напишете:
#!/bin/bash
echo "Hello World"
Първият ред от програмата казва,, че ще използваме bash интерпретатора за да подкараме програмата. В този случай bash се намира в /bin директорията. Ако bash се намира в друга директория на вашата система, тогава направете необходимите премени в първия ред. Изричното споменаване на това кой интерпретататор ще изпълнява скрипта е много важно, тъи като той казва на Linux какви инструкции могат да бъдат използвани в скрипта. Следващото нещо, което трябва да направите, е да запишете файла под името hello.sh. Остава само да направите файла изпълним. За целта напишете:
xconsole$ chmod 700 ./hello.sh
Прочетете упътването за използване на chmod командата, ако не знаете как да променяте правата на даден файл. След като сте направили програмата изпълнима, я стартирайте, като напишете:
xconsole$ ./hello.sh
Резултатът ще бъде следният надпис на екрана:
Hello World
Това е! Запомнете последователността от действия - писане на кода, записване на файла с кода, и променянето на файла в изпълним с командата chmod.
Команди, Команди, Команди
Какво точно направи вашата първа програма? Тя изпечата думите "Hello World" на екрана. Но как програмата го направи това? С помощта на команди. Единственият ред с команди беше echo "Hello World". И коя е командата? echo. Командата echo изпечатва всичко на екрана, което е получила като свой аргумент.
Аргумент е всичко, което е написано след името на командата. В нашия случай това е "Hello World". Когато напишете ls /home/root, командата е ls а нейният аргумент е /home/root. Какво означава всичко това? Това означава, че ако имате програма или команда, която изпечатва аргументите си на екрана, то може да я използвате вместо echo. Нека да предположим, че имаме такава команда, която се казва foo. Тази команда ще изпечата своите аргументи на екрана. Тогава нашият скрипт може да изглежда така:
#!/bin/bash
foo "Hello World"
Запишете го и го направете изпълним с chmod след което го стартирайте:
xconsole$ ./hello
Hello World
Точно същият резултат. Всичко, което правихте до сега, е да използвате echo командата във вашия шел скрипт. Друга команда за изпечатване е printf. Командата printf позволява повече контрол при изпечатване на информацията, особено ако сте запознати с програмния език C. Фактически съшият резултат от нашият скрипт можем да постигнем, просто ако напишем в командния ред:
xconsole$ echo "Hello World"
Hello World
Както виждате може да използвате Linux команди при писането на шел скриптове. Вашият bash шел скрипт е колекция от различни програми, специално написани заедно, за да изпълнят конкретна задача.
Малко по-лесни програми
Сега ще напишем програма, с която да преместим всички файлове от дадена директория в нова директория, след което ще изтрием новата директория заедно със нейното съдържание и ще я създадем отново. Това може да бъде направено със следната последователност от команди:
xconsole$ mkdir trash
xconsole$ mv * trash
xconsole$ rm -rf trash
xconsole$ mkdir trash
Вместо да пишем последователно тези команди можем да ги запишем във файл:
#!/bin/bash
mkdir trash
mv * trash
rm -rf trash
mkdir trash
echo "Deleted all files!"
Запишете файла под името clean.sh. След като стартирате clean.sh, той ще премести всички файлове в директория trash, след което ще изтрие директорията заедно със съдържанието и ще я създаде отново. Дори ще изпечата съобщение на екрана, когато свърши с тези действия. Този пример показва и как да автоматизирате многократното писане на последователности от команди.
Коментари във скрипта
Коментарите помагат да направите вашата програма по-лесна за разбиране. Те не променят нищо в изпълнението на самата програма . Те се използват единствено, за да може вие да ги четете. Всички коментари в bash започват със символа: "#", с изключение на първия ред (#!/bin/bash). Първият ред не е команда. Всички редове след първия, които започват със "#", са коментари. Вижте кода на следния скрипт:
#!/bin/bash
# tazi programa broi chislata ot 1 do 10:
for i in 1 2 3 4 5 6 7 8 9 10; do
echo $i
done
Дори и да не знаете bash, веднага може да се ориентирате какво прави скрипта, след като прочетете коментара. Добре е при писане на скриптове да използвате коментари. Ще откриете, че ако ви се наложи да промените някоя програма, която сте писали преди време, коментарите ще ви бъдат от голяма полза.
Променливи
Променливите най-общо казано са "кутии" които съхраняват информация. Вие може да използвате променливи за много неща. Те ви помагат да съхранявате информацията, която е въвел потребителя, аргументи или числова информация. Погледнете този код:
#!/bin/bash
x=12
echo "Stoinosta na promenliwata x e $x"
Всичко, което се случва е да присвоим на променливата x стойност 12 и да отпечатаме тази стойност с комадата echo. echo "Stoinosta na promenliwata x e $x" изпечатва текущата стойност на x. Когато давате стойност на дадена променлива, не трябва да има шпации между нея и "=". Ето какъв е синтаксиса:
име_на_променлива=стойност
Стойността на променливата можем да получим като поставим символа "$" пред нея. В конкретния случай за да изпечатаме стойността на& x пишем echo $x.
Има два типа променливи - локални променливи и променливи на обкръжението (environment). Променливите на обкръжението се задават от системата и информация за тях може да се получи като се използва env командата. Например:
xconsole$ echo $SHELL
Ще отпечата
/bin/bash
Което е името на шела, който използваме в момента. Променливите на обкръжението са дефинирани в /etc/profile и ~/.bash_profile. С echo командата можете лесно да проверите текущата стойност на дадена променлива, била тя от обкръжението или локална. Ако все още се чудите защо са ни нужни променливи, следната програма е добър пример, който илюстрира тяхното използване:
#!/bin/bash
echo "Stojnosta na x e 12."
echo "Az imam 12 moliwa."
echo "Toj mi kaza che stojnosta na x e 12."
echo "Az sym na 12 godini."
echo "Kak taka stojnosta na x e 12?"
Да предположим, че в един момент решите да промените стойността на x от 12 на 8. Какво трябва да направите? Трябва да промените навсякъде в кода 12 с 8. Да но... има редове, в които 12 не е стойността на x. Трябва ли да променяме и тези редове? Не, защото те не са свързани с x. Не е ли объркващо? По-надолу е същият пример, само че се използват променливи:
#!/bin/bash
x=12 # stoinosta na promenliwata x e 12 e x
echo "Stoinosta na x e $x."
echo "Az imam 12 moliwa."
echo "Toj mi kaza che stojnosta na x e $x."
echo "Az sym na 12 godini."
echo "Kak taka stojnosta na x e $x?"
В този пример $x ще изпечата текущата стойност на x, която е 12. По този начин ако искате да промените стойността на x от 12 на 8 е необходимо единствено да замените реда в който пише x=12 с x=8. Другите редовете няма да бъдат променени. Променливите имат и други полезни свойства, както ще се убедите сами в последствие.
Писане на скриптове за BASH шел : версия 1.2 (част 2)
Тази статия е преведена с разрешението на автора и X_console.
Адресът на оригиналната статия е .
Продължениe на [ част 1 ].
Условни оператори
Условните оператори позволяват вашата програма да "взема решения" и я правят по-компактна. Което е по-важно – с тях може да проверявате за грешки. Всички примери до сега започваха изпълнението си от първия ред до последния без никакви проверки. За пример:
#!/bin/bash
cp /etc/foo .
echo "Done."
Тази малка шел програма копира файла /etc/foo в текущата директория и изпечатва "Done" на екрана. Тази програма ще работи само при едно условие. Трябва да има файл /etc/foo. В противен случай ще се получи следният резултат:
xconsole$ ./bar.sh
cp: /etc/foo: No such file or directory
Done.
Както виждате, имаме проблем. Не всеки, който стартира вашата програма, има файл /etc/foo на системата си. Ще бъде по-добре, ако вашата програма проверява дали файла /etc/foo съществува и ако това е така, да продължи с копирането, в противен случай да спре изпълнението. С "псевдо" код това изглежда така:
if /etc/code exists, then
copy /etc/code to the current directory
print "Done." to the screen.
otherwise,
print "This file does not exist." to the screen
exit
Може ли това да бъде направено с bash? Разбира се! В bash условните оператори са: if, while, until, for, и case. Всеки оператор започва с ключова дума и завършва с ключова дума. Например if оператора започва с ключовата дума if, и завършва с fi. Условните оператори не са програми във вашата система. Те са вградени свойства на bash.
if ... else ... elif ... fi
Е един от най-често използваните условни оператори. Той дава възможност на програма да вземе решения от рода на "направи това ако(if) това условие е изпълнено, или(else) прави нещо друго". За да използвате ефективно условния оператор if, трябва да използвате командата test. test проверява за съществуване на файл, права, подобия или разлики. Ето програмата bar.sh:
#!/bin/bash
if test -f /etc/foo
then
# file exists, so copy and print a message.
cp /etc/foo .
echo "Done."
else
# file does NOT exist, so we print a message and exit.
echo "This file does not exist."
exit
fi
Забележете че редовете след then и else са малко по-навътре. Това не е задължително, но се прави с цел програмата да бъде по-лесна за четене. Сега стартирайте програмата. Ако имате файл /etc/foo, тогава програмата ще го копира в текущата директория, в противен случай ще върне съобщение за грешка. Опцията -f проверява дали това е обикновен файл. Ето списък с опциите на командата test:
-d проверява дали файлът е директория
-e проверява дали файлът съществува
-f проверява дали файлът е обикновен файл
-g проверява дали файлът има SGID права
-r проверява дали файлът може да се чете
-s проверява дали размерът на файла не е 0
-u проверява дали файлът има SUID права
-w проверява дали върху файлът може да се пише
-x проверява дали файлът е изпълним
else се използва, ако искате вашата програма да направи нещо друго, ако първото условие не е изпълнено. Има и ключова дума elif, която може да бъде използвана вместо да пишете друг if вътре в първия if. elif идва от английското "else if". Използва се, когато първото условие не е изпълнено и искате да проверите за друго условие.
Ако не се чувствате комфортно с if и test синтаксиса, който е :
if test -f /etc/foo
then
тогава може да използвате следния вариант:
if [ -f /etc/foo ]; then
Квадратните скоби формират test командата. Ако имате опит в програмирането на C този синтакс може да ви се стори по-удобен. Забележете, че трябва да има разстояние след отварящата квадратна скоба и преди затварящата. Точката и запетаята: ";" казва на шела че това е края на командата. Всичко след ";" ще бъде изпълнено сякаш се намира на следващия ред. Това прави програмата малко по-четима. Можете разбира се да сложите then на следващия ред.
Когато използваме променливи с test е добре да ги заградим с кавички. Например:
if [ "$name" -eq 5 ]; then
while ... do ... done
while оператора е условен оператор за цикъл. Най-общо казано, това което прави е "while(докато) това условие е вярно, do(изпълни) командите done ". Нека да видим следния пример:
#!/bin/bash
while true; do
echo "Press CTRL-C to quit."
done
true в действителност е програма. Това което прави тази програма е да се изпълнява безкрайно. Използването на true се смята, че забавя вашата програма, защото шел интерпретатора първо трябва да извика програмата и след това да я изпълни. Вместо това може да използвате командата ":":
#!/bin/bash
while :; do
echo "Press CTRL-C to quit."
done
По този начин вие постигате същия резултат, но доста по бързо. Единствения недостатък е, че програмата става по-трудно четима. Ето един по-подробен пример, който използва променливи:
#!/bin/bash
x=0; # initialize x to 0
while [ "$x" -le 10 ]; do
echo "Current value of x: $x"
# increment the value of x:
x=$(expr $x + 1)
sleep 1
done
Както виждате използваме test (записана като квадратни скоби) за да проверим състоянието на променливата x. Опцията -le проверява дали x е по-малко (less) или равно (equal) на 10. На говорим език това се превежда по следния начин "Докато (while) x е по-малко или равно на 10, покажи текущата стойност на x, и след това добави 1 към текущата стойност на x.". sleep 1 казва на програмата да спре изпълнението си за една секунда. Както виждате това което правим тук в да проверим за равенство. Ето списък с някой опции на test:
Проверка за равенства между променливите x и y, ако променливите са числа:
x -eq y Проверява дали x е равно на y
x -ne y Проверява дали x не е равно на y
x -gt y Проверява дали x е по-голямо от y
x -lt y Проверява дали x е по-малко от y
Проверка за равенства между променливите x и y, ако променливите са текст:
x = y Проверява дали x е същата като y
x != y Проверява дали x не е същата като y
-n x Проверява дали x не е празен текст
-z x Проверява дали x е празен текст
От горния пример единственият ред, който може да ви се стори по-труден за разбиране е следния:
x=$(expr $x + 1)
Това което прави този ред е да увеличи стойността на x с 1. Но какво значи $(...)? Дали е променлива? Не. На практика това е начин да кажете на шел интерпретатора, че ще изпълнявате командата expr $x + 1, и резултатът от тази команда ще бъде присвоен на x. Всяка команда, която бъде записана в $(...), ще бъде изпълнена:
#!/bin/bash
me=$(whoami)
echo "I am $me."
Опитайте с този пример, за да разберете какво имам предвид. Горната програмка може да бъде написана по-следния начин:
#!/bin/bash
echo "I am $(whoami)."
Сами си решете кой от начините е по-лесен за вас. Има и друг начин да изпълните команда или да присвоите резултата от изпълнението на дадена команда на променлива. Този начин ще бъде обяснен по-нататък. За сега използвайте $(...).
until ... do ... done
Условният оператор until е много близък до while. Единствената разлика е, че се обръща смисъла на условието и се взима предвид новото значение. Действието на until оператора е "докато (until) това условие е вярно, изпълнявай (do) командите". Ето пример:
#!/bin/bash
x=0
until [ "$x" -ge 10 ]; do
echo "Current value of x: $x"
x=$(expr $x + 1)
sleep 1
done
Този код може би ви изглежда познат. Проверете го и вижте какво прави. until ще изпълнява командите докато стойността на променливата x е по-голяма или равна на 10. Когато стойността на x стане 10, цикълът ще спре. Ето защо последната стойност на x, която ще се изпечата е 9.
for ... in ... do ... done
for се използва когато искате да присвоите на дадена променлива набор от стойности. Например можете да напишете програма, която да изпечатва 10 точки всяка секунда:
#!/bin/bash
echo -n "Checking system for errors"
for dots in 1 2 3 4 5 6 7 8 9 10; do
echo -n "."
done
echo "System clean."
В случай, че не знаете опцията -n на командата echo спира автоматичното добавяне на нов ред. Пробвайте командата веднъж с -n опцията и веднъж без нея за да разберете за какво става дума. Променливата dots преминава през стойностите от 1 до 10. Вижте следния пример:
#!/bin/bash
for x in paper pencil pen; do
echo "The value of variable x is: $x"
sleep 1
done
Когато стартирате програмата ще видите че x в началото ще има стойност paper, след което ще премине на следващата стойност, която е pencil, и след това pen. Когато свършат стойностите през който минава цикъла изпълнението му завършва.
Ето една доста полезна програма. Тя добавя .html разширение на всички файлове в текущата директория:
#!/bin/bash
for file in *; do
echo "Adding .html extension to $file..."
mv $file $file.html
sleep 1
done
Ако не знаете "*" е "wild card character". Това ще рече "всичко в текущата директория", което в нашия случай представлява всички файлове в тази директория. Променливата file ще премине през всички стойности, в този случай файловете в текущата директория. След което командата mv преименува стойностите на променливата file във такива с .html разширение.
case ... in ... esac
Условния оператор case е близък до if . За предпочитане е да се използва, когато имаме голям брой условия, които трябва да бъдат проверени. Вземете за пример следния код:
#!/bin/bash
x=5 # initialize x to 5
# now check the value of x:
case $x in
0) echo "Value of x is 0."
;;
5) echo "Value of x is 5."
;;
9) echo "Value of x is 9."
;;*) echo "Unrecognized value."
esac
Операторът case ще провери стойност на x на коя от 3-те възможности отговаря. В този случай първо ще провери дали стойностра на x е 0, след което ще провери за 5 и 9. Накрая ако никое от условия не е изпълнено ще се изпечата съобщението "Unrecognized value.". Имайте предвид, че "*" означава "всичко", и в този случай това означава "която и да е стойност различна от посочените". Ако стойността на x е различна от 0, 5, или 9, то тогава тя попада в случая "*". Когато използвате case, всяко условие трябва да завършва с две ";". Може би се чудите защо да използвате case, когато може да използвате if? Ето как изглежда еквивалентната програма, написана с if. Вижте коя програма е по-бърза и по лесна за четене:
#!/bin/bash
x=5 # initialize x to 5
if [ "$x" -eq 0 ]; then
echo "Value of x is 0."
elif [ "$x" -eq 5 ]; then
echo "Value of x is 5."
elif [ "$x" -eq 9 ]; then
echo "Value of x is 9."
else
echo "Unrecognized value."
fi
Писане на скриптове за BASH шел : версия 1.2 (част 3)
Тази статия е преведена с разрешението на автора и X_console.
Адресът на оригиналната статия е .
Продължениe на [ част 2 ].
Кавички
Кавичките играят голяма роля в шел програмирането. Има три различни вида: двойни кавички: ", единична кавичка: ', и обратно наклонена кавичка: `. Различават ли се те една от друга? - Да.
Обикновено използваме двойната кавичка, за да обозначим с нея низ от символи и да запазим шпацията. Например "Този низ съдържа шпации.". Низ заграден от двойни кавички се третира като един аргумент. Вземете следният скрипт за пример:
xconsole$ mkdir hello world
xconsole$ ls -F
hello/ world/
Създадохме две директории. Командата mkdir взе думите hello и world като два аргумента, създавайки по този начин две директории. А какво ще се случи сега:
xconsole$ mkdir "hello world"
xconsole$ ls -F
hello/ hello world/ world/
Създадохме една директория, състояща се от две думи. Двойните кавички направиха командата да третира двете думи като един аргумент . Без тях mkdir щеше да приеме hello за първи аргумент и world за втори.
Единична кавичка се използва обикновено, когато се занимаваме с променливи. Ако една променлива е заградена от двойни кавички, то нейната стойност ще бъде оценена. Но това няма да се случи ако използваме единични кавички. За да ви стане по-ясно, разгледайте следния пример:
#!/bin/bash
x=5 # stojnosta na x e 5
# izpolzwame dwojni kawichki
echo "Using double quotes, the value of x is: $x"
# izpolzwame edinichni kawichki
echo 'Using forward quotes, the value of x is: $x'
Виждате ли разликата? Може да използвате двойни кавички, ако не смятате да слагате и променливи в низа, който ще заграждат кавичките. Ако се чудите дали единичните кавички запазват шпациите в даден низ, както това правят двойните кавички, погледнете следния пример:
xconsole$ mkdir 'hello world'
xconsole$ ls -F
hello world/
Обратно наклонените кавички коренно се различават от двойните и единични кавички. Те не се използват, за да запазват шпациите. Ако си спомняте, по-рано използвахме следния ред:
x=$(expr $x + 1)
Както вече знаете резултатът от командата expr $x + 1 се присвоява на променливата x. Същият този резултат може да бъде постигнат, ако използваме обратно наклонени кавички:
x=`expr $x + 1`
Кой от начините да използвате? Този, който предпочитате. Ще откриете, че обратно наклонените кавички са по-често използвани от $(...). В много случай обаче $(...) прави кода по-лесен за четене. Вземете предвид това:
$!/bin/bash
echo "I am `whoami`"
Аритметически операции с BASH
bash ви позволява да смятате различни аритметични изрази. Както вече видяхте, аритметическите операции се използват посредством командата expr. Тази команда обаче, както и командата true, се смятат за доста бавни. Причината за това е, че шел интерпретаторът трябва всеки път да стартира true и expr командите, за да ги използва. Като алтернатива на true посочихме командата ":". А като алтернатива на expr ще изпозваме следния израз $((...)). Разликата със $(...) е броя на скобите. Нека да опитаме:
#!/bin/bash
x=8 # stojnosta na x e 8
y=4 # stojnosta na y e 4
# sega shte priswojm sumata na promenliwite x i y na promenliwata z:
z=$(($x + $y))
echo "Sum na $x + $y e $z"
Ако се чувствате по-комфортно с expr вместо $((...)), тогава го използвайте него.
С bash можете да събирате, изваждате, умножавате, делите числа, както и да делите по модул. Ето и техните символи:
ДЕЙСТВИЕ ОПЕРАТОР
Събиране +
Изваждане -
Умножение *
Деление /
Деление по модул %
Всеки от Вас би трябвало да знае какво правят първите четири оператора. Ако не знаете какво означава деление по модул - това е остатъкът при деление на две стойности. Ето и малко bash аритметика:
#!/bin/bash
x=5 # initialize x to 5
y=3 # initialize y to 3
add=$(($x + $y)) # sumiraj x sys y i priswoj rezultata na promenliwata add
sub=$(($x - $y)) # izwadi ot x y i priswoj rezultata na promenliwata sub
mul=$(($x * $y)) # umnozhi x po y i priswoj rezultata na promenliwata mul
div=$(($x / $y)) # razdeli x na y i priswoj rezultata na promenliwata div
mod=$(($x % $y)) # priswoj ostatyka pri delenie na x / y na promenliwata mod
# otpechataj otgoworite:
echo "Suma: $add"
echo "Razlika: $sub"
echo "Projzwedenie: $mul"
echo "Quotient: $div"
echo "Ostatyk: $mod"
Отново горният код можеше да бъде написан с командата expr. Например вместо add=$(($x + $y)), щяхме да пишем add=$(expr $x + $y), или add=`expr $x + $y`.
Четене на информация от клавиатурата
Сега вече идваме към интересната част. Вие можете да направите Вашите програми да си взаимодействат с потребителя и потребителят да може да си взаимодейства с програмата. Командата, която Ви позволява да прочетете каква стойност в въвел потребителят е read. read е вградена в bash команда, която се използва съвместно с променливи, както ще видите:
#!/bin/bash
# gets the name of the user and prints a greeting
echo -n "Enter your name: "
read user_name
echo "Hello $user_name!"
Променливата тук е user_name. Разбира се, може да я наречете, както си искате. read ще Ви изчака да въведете нещо и да натиснете клавиша ENTER. Ако не натиснете нищо, командата read ще чака, докато натиснете ENTER. Ако ENTER е натиснат, без да е въведено нещо, то ще продължи изпълнението на програмата от следващия ред. Ето и пример:
#!/bin/bash
# gets the name of the user and prints a greeting
echo -n "Enter your name: "
read user_name
# the user did not enter anything:
if [ -z "$user_name" ]; then
echo "You did not tell me your name!"
exit
fi
echo "Hello $user_name!"
Ако потребителят натисне само клавиша ENTER, нашата програма ще се оплаче и ще прекрати изпълнението си. В противен случай ще изпечата поздравление. Четенето на информацията, която се въвежда от клавиатурата е полезно, когато правите интерактивни програми, които изискват потребителят да отговори на конкретни въпроси.
Функции
Функциите правят скрипта по-лесен за поддържане. Най-общо казано, функциите разделят програмата на малки части. Функциите изпълняват действия, които Вие сте дефинирали и може да върне стойност от изпълнението си ако желаете. Преди да продължим, ще Ви покажа един пример на шел програма, която използва функция:
#!/bin/bash
# functiqta hello() samo izpechatwa syobshtenie
hello()
{
echo "Wie ste wyw funkciq hello()"
}
echo "Izwikwame funkciqta hello()..."
# izwikwame hello() funkciqta wytre w shell skripta:
hello
echo "Weche izleznahte ot funkciqta hello()"
Опитайте се да напишете тази програма и да я стартирате. Единствената цел на функцията hello() е да изпечата съобщение. Функциите естествено могат да изпълняват и по-сложни задачи. В горния пример ние извикахме функцията hello() с този ред:
hello
Когато се изпълнява този ред, bash интерпретаторът претърсва скрипта за ред, който започва с hello(). След което открива този ред и изпълнява съдържанието на функцията.
Функциите винаги се извикват чрез тяхното име. Когато пишете функция, можете да започнете функцията с function_name(), както беше направено в горния пример, или да използвате думата function т.е function function_name(). Другият начин, по който можем да започнем нашата функция е function hello():
function hello()
{
echo "Wie ste wyw funkciq hello()"
}
Функциите винаги започват с отваряща и затваряща скоба"()", последвани от отварящи и затварящи къдрави скоби: "{...}". Тези къдрави скоби бележат началото и края на функцията. Всеки ред с код, затворен в тези скоби ще бъде изпълнен и ще принадлежи единствено на функцията. Функциите трябва винаги да бъдат дефинирани преди да бъдат извикани. Нека погледнем нашата програма, само че този път ще извикаме функцията преди да е дефинирана:
#!/bin/bash
echo "Izwikwame funkciqta hello()..."
# call the hello() function:
hello
echo "Weche izleznahte ot funkciqta hello()"
# function hello() just prints a message
hello()
{
echo "Wie ste wyw funkciq hello()"
}
Ето какъв е резултатът, когато се опитаме да изпълним програмата:
xconsole$ ./hello.sh
Izwikwame funkciqta hello()...
./hello.sh: hello: command not found
Weche izleznahte ot funkciqta hello()
Както виждате, програмата върна грешка. Ето защо е добре да пишете вашите функции в началото на скрипта или поне преди да ги извикате. Ето друг пример как да използваме функции:
#!/bin/bash
# admin.sh - administrative tool
# function new_user() creates a new user account
new_user()
{
echo "Preparing to add a new user..."
sleep 2
adduser # run the adduser program
}
echo "1. Add user"
echo "2. Exit"
echo "Enter your choice: "
read choice
case $choice in
1) new_user # call the new_user() function
;;*) exit
;;
esac
За да работи правилно тази програма трябва да сте влезли като root, тъй като adduser е програма, която само root потребителят има право да изпълнява. Да се надяваме, че този кратък пример Ви е убедил в полезноста на фукциите.
Прихващане не сигнали
Може да използвате вградената команда trap< за да прихващате сигнали във вашата програма. Това е добър начин да излезете нормално от програмата. Например, ако имате вървяща програма при натискането на CTRL-C ще изпратите на програмата interrupt сигнал, който ще "убие" програмата. trap; ще ви позволи да прихване този сигнал и ще ви даде възможност или да продължите с изпълнението на програмата, или да съобщите на потребителя, че програмата спира изпълнението си. trap има следния синтаксис:
trap dejstwie signal
dejstwie указва какво да искате да направите, когато прихванете даден сигнал, а signal е сигналът, който очакваме. Списък със сигналите може да откриете като пишете trap -l. Когато използвате сигнали във Вашата шел програма пропуснете първите три букви на сигнала, обикновено те са SIG. Например, ако сигналът за прекъсване е SIGINT, във Вашата шел програма използвайте само INT. Можете да използвате и номера на сигнала. Номерът на сигнала SIGINT е 2. Пробвайте следната програма:
#!/bin/bash
# using the trap command
# da se zipylni funkciqta sorry() pri natiskane na CTRL-C:
trap sorry INT
# function sorry() prints a message
sorry()
{
echo "I'm sorry Dave. I can't do that."
sleep 3
}
# count down from 10 to 1:
for i in 10 9 8 7 6 5 4 3 2 1; do
echo $i seconds until system failure."
sleep 1
done
echo "System failure."
Сега, докато програмата върви и брои числа в обратен ред, натиснете CTRL-C. Това ще изпрати сигнал за прекъсване на програмата. Сигналът ще бъде прихванат от trap командата, която ще изпълни sorry() функцията. Можете да накарате trap да игнорира сигнал като поставите "' '" на мястото на действие. Можете да накарате trap да не прихваща сигнал като използвате "-". Например:
# izpylni sorry() funkciqta kogato programa poluchi signal SIGINT:
trap sorry INT
# nakaraj programata da NE prihwashta SIGINT signala :
trap - INT
# ne prawi nishto kogato se prihwane signal SIGINT:
trap ' ' INT
Когато кажете на trap да не прихваща сигнала, то програмата се подчинява на основното действие на сигнал, което в конкретния случай е да прекъсне програмата и да я "убие". Когато укажете trap да не прави нищо при получаване на конкретен сигнал, то програмата ще продължи своето действие, игнорирайки сигнала.
Вижте [ Част 1| Част 2 | Част 3 | Част 4 ]
Тази статия е преведена с разрешението на автора и X_console.
Адресът на оригиналната статия е .
Продължениe на [ част 2 ].
Кавички
Кавичките играят голяма роля в шел програмирането. Има три различни вида: двойни кавички: ", единична кавичка: ', и обратно наклонена кавичка: `. Различават ли се те една от друга? Да.
Обикновено използваме двойната кавичка, за да обозначим с нея низ от символи и да запазим шпацията. Например "Този низ съдържа шпации.". Низ заграден от двойни кавички се третира като един аргумент. Вземете следния скрипт за пример:
xconsole$ mkdir hello world
xconsole$ ls -F
hello/ world/
Създадохме две директории. Командата mkdir взе думите hello и world като два аргумента, създавайки по този начин две директории. А какво ще се случи сега:
xconsole$ mkdir "hello world"
xconsole$ ls -F
hello/ hello world/ world/
Създадохме една директория, състояща се от две думи. Двойните кавички направиха командата да третира двете думи като един аргумент . Без тях mkdir щеше да приеме hello за първи аргумент и world за втори.
Единична кавичка се използва обикновено, когато се занимаваме с променливи. Ако една променлива е заградена от двойни кавички, то нейната стойност ще бъде оценена. Но това няма да се случи ако използваме единични кавички. За да Ви стане по-ясно разгледайте следния пример:
#!/bin/bash
x=5 # stojnosta na x e 5
# izpolzwame dwojni kawichki
echo "Using double quotes, the value of x is: $x"
# izpolzwame edinichni kawichki
echo 'Using forward quotes, the value of x is: $x'
Виждате ли разликата? Може да използвате двойни кавички, ако не смятате да слагате и променливи в низа, който ще заграждат кавичките. Ако се чудите дали единичните кавички запазват шпациите в даден низ, както това правят двойните кавички, погледнете следния пример:
xconsole$ mkdir 'hello world'
xconsole$ ls -F
hello world/
Обратно наклонените кавички коренно се различават от двойните и единични кавички. Те не се използват, за да запазват шпациите. Ако си спомняте по-рано използвахме следния ред:
x=$(expr $x + 1)
Както вече знаете, резултатът от командата expr $x + 1 се присвоява на променливата x. Същият този резултат може да бъде постигнат ако използваме обратно наклонени кавички:
x=`expr $x + 1`
Кой от начините да използвате? Този, който предпочитате. Ще откриете, че обратно наклонените кавички са по-често използвани от $(...). В много случаи обаче $(...) прави кода по-лесен за четене. Вземете предвид това:
$!/bin/bash
echo "I am `whoami`"
Аритметически операции с BASH
bash ви позволява да смятате различни аритметични изрази. Както вече видяхте аритметическите операции се използват посредством командата expr. Тaзи команда, обаче, както и командата true се смята, че са доста бавни. Причината за това е, че шел интерпретаторът трябва всеки път да стартира true и expr командите, за да ги използва. Като алтернатива на true посочихме командата ":". А като алтернатива на expr ще изпозваме следния израз $((...)). Разликата със $(...) е броят на скобите. Нека да опитаме:
#!/bin/bash
x=8 # stojnosta na x e 8
y=4 # stojnosta na y e 4
# sega shte priswojm sumata na promenliwite x i y na promenliwata z:
z=$(($x + $y))
echo "Sum na $x + $y e $z"
Ако се чувствате по-комфортно с expr вместо $((...)), тогава използвайте него.
С bash можете да събирате, изваждате, умножавате, делите числа, както и да делите по модул. Ето и техните символи:
ДЕЙСТВИЕ ОПЕРАТОР
Събиране +
Изваждане -
Умножение *
Деление /
Деление по модул %
Всеки от Вас би трябвало да знае какво правят първите четири оператора. Ако не знаете какво означава деление по модул това е остатъкът при деление на две стойности. Ето и малко bash аритметика:
#!/bin/bash
x=5 # initialize x to 5
y=3 # initialize y to 3
add=$(($x + $y)) # sumiraj x sys y i priswoj rezultata na promenliwata add
sub=$(($x - $y)) # izwadi ot x y i priswoj rezultata na promenliwata sub
mul=$(($x * $y)) # umnozhi x po y i priswoj rezultata na promenliwata mul
div=$(($x / $y)) # razdeli x na y i priswoj rezultata na promenliwata div
mod=$(($x % $y)) # priswoj ostatyka pri delenie na x / y na promenliwata mod
# otpechataj otgoworite:
echo "Suma: $add"
echo "Razlika: $sub"
echo "Projzwedenie: $mul"
echo "Quotient: $div"
echo "Ostatyk: $mod"
Отново горният код можеше да бъде нашисан с командата expr. Например вместо add=$(($x + $y)), щяхме да пишем add=$(expr $x + $y), или add=`expr $x + $y`.
Четене на информация от клавиатурата
Сега вече идваме към интересната част. Вие можете да направите Вашите програми да си взаимодействат с потребителя и потребителят да може да си взаимодейства с програмата. Командата която Ви позволява да прочетете каква стойност в въвел потребителят е read. read е вградена в bash команда, която се използва съвместно с променливи, както ще видите:
#!/bin/bash
# gets the name of the user and prints a greeting
echo -n "Enter your name: "
read user_name
echo "Hello $user_name!"
Променливата тук е user_name. Разбира се, може да я наречете, както си искате. read ще ви изчака да въведето нещо и да натиснете клавиша ENTER. Ако не натиснете нищо, командата read ще чака, докато натиснете ENTER . Ако ENTER е натиснат, без да е въведено нещо, то ще продължи изпълнението на програмата от следващия ред. Ето и пример:
#!/bin/bash
# gets the name of the user and prints a greeting
echo -n "Enter your name: "
read user_name
# the user did not enter anything:
if [ -z "$user_name" ]; then
echo "You did not tell me your name!"
exit
fi
echo "Hello $user_name!"
Ако потребителят натисне само клавиша ENTER, нашата програма ще се оплаче и ще прекрати изпълнението си. В противен случай ще изпечата поздравление. Четенето на информацията, която се въвежда от клавиатурата е полезно, когато правите интерактивни програми, които изискват потребителят да отговори на конкретни въпроси.
Функции
Функциите правят скрипта по-лесен за поддържане. Най-общо казано, функциите разделят програмата на малки части. Функциите изпълняват действия, които Вие сте дефинирали и може да върне стойност от изпълнението си ако желаете. Преди да продължим, ще Ви покажа един пример на шел програма, която използва функция:
#!/bin/bash
# functiqta hello() samo izpechatwa syobshtenie
hello()
{
echo "Wie ste wyw funkciq hello()"
}
echo "Izwikwame funkciqta hello()..."
# izwikwame hello() funkciqta wytre w shell skripta:
hello
echo "Weche izleznahte ot funkciqta hello()"
Опитайте се да напишете тази програма и да я стартирате. Единствената цел на функцията hello() е да изпечата съобщение. Функциите естествено могат да изпълняват и по-сложни задачи. В горния пример ние извикахме функцията hello() с този ред:
hello
Когато се изпълнява този ред bash интерпретатора претърсва скрипта за ред който започва с hello(). След което открива този ред и изпълнява съдържанието на функцията.
Функциите винаги се извикват чрез тяхното име. Когато пишете функция можете да започнете функцията с function_name(), както беше направено в горния пример, или да използвате думата function т.е function function_name(). Другият начин, по който можем да започнем нашата функция е function hello():
function hello()
{
echo "Wie ste wyw funkciq hello()"
}
Функциите винаги започват с отваряща и затваряща скоба"()", последвани от отварящи и затварящи къдрави скоби: "{...}". Тези къдрави скоби бележат началото и края на функцията. Всеки ред с код затворен в тези скоби ще бъде изпълнен и ще принадлежи единствено на функцията. Функциите трябва винаги да бъдат дефинирани преди да бъдат извикани. Нека погледнем нашата програма, само че този път ще извикаме функцията преди да е дефинирана:
#!/bin/bash
echo "Izwikwame funkciqta hello()..."
# call the hello() function:
hello
echo "Weche izleznahte ot funkciqta hello()"
# function hello() just prints a message
hello()
{
echo "Wie ste wyw funkciq hello()"
}
Ето какъв е резултатът, когато се опитаме да изпълним програмата:
xconsole$ ./hello.sh
Izwikwame funkciqta hello()...
./hello.sh: hello: command not found
Weche izleznahte ot funkciqta hello()
Както виждате, програмата върна грешка. Ето защо е добре да пишете Вашите функции в началото на скрипта или поне преди си ги извикате. Ето друг пример как да използваме функции:
#!/bin/bash
# admin.sh - administrative tool
# function new_user() creates a new user account
new_user()
{
echo "Preparing to add a new user..."
sleep 2
adduser # run the adduser program
}
echo "1. Add user"
echo "2. Exit"
echo "Enter your choice: "
read choice
case $choice in
1) new_user # call the new_user() function
;;*) exit
;;
esac
За да работи правилно тази програма, трябва да сте влезли като root, тъй като adduser е програма, която само root потребителят има право да изпълнява. Да се надяваме, че този кратък пример Ви е убедил в полезноста на фукциите.
Прихващане на сигнали
Може да използвате вградената команда trap, за да прихващате сигнали във Вашата програма. Това е добър начин да излезете нормално от програмата. Непример, ако имате вървяща програма при натискането на CTRL-C ще изпратите на програмата interrupt сигнал, който ще "убие" програмата. trap ще Ви позволи да прихване този сигнал и ще Ви даде възможност или да продължите с изпълнението на програмата, или да съобщите на потребителя, че програмата спира изпълнението си. trap има следния синтаксис:
trap dejstwie signal
dejstwie указва какво да искате да направите, когато прихванете даден сигнал, а signal е сигналът, който очакваме. Списък със сигналите може да откриете като пишете trap -l. Когато използвате сигнали във вашата шел програма пропуснете първите три букви на сигнала, обикновено те са SIG. Например, ако сигналът за прекъсване е SIGINT, във Вашата шел програма използвайте само INT. Можете да използвате и номера на сигнала. Номерът на сигнала SIGINT е 2. Пробвайте следната програма:
#!/bin/bash
# using the trap command
# da se zipylni funkciqta sorry() pri natiskane na CTRL-C:
trap sorry INT
# function sorry() prints a message
sorry()
{
echo "I'm sorry Dave. I can't do that."
sleep 3
}
# count down from 10 to 1:
for i in 10 9 8 7 6 5 4 3 2 1; do
echo $i seconds until system failure."
sleep 1
done
echo "System failure."
Сега, докато програмата върви и брои числа в обратен ред натиснете CTRL-C. Това ще изпрати сигнал за прекъсване на програмата. Сигналът ще бъде прихванат от trap командата, която ще изпълни sorry() функцията. Можете да накарате trap да игнорира сигнал като поставите "' '" на мястото на действие. Можете да накарате trap да не прихваща сигнал като използвате "-". Например:
# izpylni sorry() funkciqta kogato programa poluchi signal SIGINT:
trap sorry INT
# nakaraj programata da NE prihwashta SIGINT signala :
trap - INT
# ne prawi nishto kogato se prihwane signal SIGINT:
trap ' ' INT
Когато кажете на trap да не прихваща сигнала, то програмата се подчинява на основното действие на сигнал, което в конкретния случай е да прекъсне програмата и да я "убие". Когато укажете trap да не прави нищо при получаване на конкретен сигнал, то програмата ще продължи своето действие, игнорирайки сигнала.
Писане на скриптове за BASH шел : версия 1.2( част 4)
Тази статия е преведена с разрешението на автора и X_console.
Адресът на оригиналната статия е .
Продължениe на [ част 3 ].
AND и OR
Видяхме как се използват условните оператори и колко полезни са те. Има две допълнителни неща, които могат да бъдат добавени. Условните изрази са AND (или "&&") и OR (или "||"). AND условният израз изглежда по следния начин:
условие_1 && условие_2
AND изразът проверява първо най-лявото условие. Ако условието е вярно се проверява второто условие. Ако и то е вярно се изпълнява останалата част от кода на скрипта. Ако условие условие_1 не е вярно(върне резултат false), тогава условие условие_2 няма да бъде проверено. С други думи:
if(ако) условие_1 е вярно, AND(и) if(ако) условие_2 е вярно, then(тогава)...
Ето един пример с AND условие:
#!/bin/bash
x=5
y=10
if [ "$x" -eq 5 ] && [ "$y" -eq 10 ]; then
echo "I dwete uslowiq sa wqrni."
else
echo "Uslowiqta ne sa wqrni."
fi
Тук виждаме, че x и y имат стойността, за която проверяваме. Променете стойноста на x от x=5 на x=12, след което пуснете отново програмата и ще се убедите, че условието не е изпълнено( връща стойност false).
OR изразът е подобен. Единствената разлика е, че проверява дали най-левият израз не е верен(т.е връща резултат false). Ако това е изпълнено се проверява следващия израз и по-следващия:
условие_1 || условие_2
С други думи това звучи така:
if(ако) условие_1 е вярно, OR(или) ако условие_2 е вярно, тогава...
Ето защо кодът след този условен оператор ще бъде изпълнен ако поне едно от условията е вярно:
#!/bin/bash
x=3
y=2
if [ "$x" -eq 5 ] || [ "$y" -eq 2 ]; then
echo "Edno ot uslowiqta e wqrno."
else
echo "Nito edno ot uslowiqta ne e wqrno."
fi
В този пример ще се уверите, че едно от условията е вярно. Сменете стойността на променливата y и изпълнете отново програмата. Ще видите, че нито едно от условията не е вярно.
Ако се замислите, ще видите, че условният оператор if може да замести употребата на AND и OR изразите. Това става чрез използването на вложени if оператори. "Влагане на if оператори" означава да използваме if оператор в тялото на друг if оператор. Можете да правите влагане и на други оператори, а не само на if. Ето един пример с вложени if оператори, които заместват използването на AND израз в кода на програмата:
#!/bin/bash
x=5
y=10
if [ "$x" -eq 5 ]; then
if [ "$y" -eq 10 ]; then
echo "I dwete uslowiq sa wqrni."
else
echo "Uslowiqta ne sa wqrni."
fi
fi
Резултатът е същият, както и ако използвахме AND израз. Проблемът е, че кодът става по-трудно четим и отнема повече време, за да се напише. За да се предпазите от проблеми, използвайте AND и OR изрази.
Използване на аргументи
Може би сте забелязали, че повечето програми в Linux не са интерактивни. От Вас се иска да въведете някакви аргументи; в противен случай получавате съобщение, в което се обяснява как да използвате програмата. Вземете за пример командата more. Ако не напишете име на файл след нея, резултатът ще бъде точно едно такова помощно съобщение. Възможно е да направите вашата шел програма да използва аргументи. За тази цел трябва да използвате специалната променлива "$#". Тази променлива съдържа общия брой на всички аргументи подадени на програмата. Например, ако изпълните следната програма:
xconsole$ foo argument
$# ще има стойност 1, защото има само един аргумент, подаден на програмата. Ако имате два аргумента, тогава $# ще има стойност 2. В допълнение стойността на всеки аргумент (нулевият аргумент е винаги името на програма - foo) може да се вземе като използвате променливите $0 - за името на програмата в случая foo, $1 за стойността на първият аргумент -argument и т.н. Може да имате максимум 9 такива променливи от $0 до $9. Нека да видим това в действие:
#!/bin/bash
# izpechataj pyrwiq argument
# proweri dali ima pone edin argument:
if [ "$#" -ne 1 ]; then
echo "usage: $0 "
fi
echo "Stojnosta na argumenta e $1"
Тази програма очаква един и само един аргумент, за да тръгне. Ако я стартирате без аргументи, или подадете повече от един аргумент, програмата ще изпечата съобщение за това как да се използва. В случай, че имаме само един аргумент шел програмата ще отпечата стойността на аргумента, който сте подали. Припомнете си, че $0 е името на програмата. Ето защо тази специална променлива се използва в "usage" съобщението.
Пренасочване и PIPING
Обикновено, когато стартирате дадена команда, резултатът от изпълнението се отпечатва на екрана. Например:
xconsole$ echo "Hello World"
Hello World
"Пренасочването" Ви позволява да съхраните резултата от изпълнението някъде другаде. В повечето случаи това става към файл. Операторът ">" се използва за пренасочване на изхода. Мислете за него като за стрелка, сочеща къде да отиде резултата. Ето един пример за пренасочване на изхода към файл:
xconsole$ echo "Hello World" > foo.file
xconsole$ cat foo.file
Hello World
Тук резултатът от командата echo "Hello World" е пренасочен към файл с име foo.file. Когато прочетете съдържанието на файла ще видите там резултата. Има един проблем, когато използвате оператора ">". Ако имате файл със същото име, то неговото съдържание няма да бъде запазено, а ще бъде изтрито и заместено с новото. Ами ако искате да добавите информация във файла, без да изтривате старата? Тогава трябва да използвате операторът за добавяне : ">>". Използва се по същия начин с тази разлика, че не изтрива старото съдържание на файла, а го запазва и добавя новото съдържание накрая.
А сега ще ви запознаем с piping. Piping-ът позволява да вземете резултата от изпълнението на дадена програма и да го използвате като входни данни за друга програма. Piping става посредством оператора: "|". Забележете, че това не е малката буквата "L". Този оператор може да получите чрез натискане на клавиша SHIFT и \. Ето и един пример за piping:
xconsole$ cat /etc/passwd | grep xconsole
xconsole:x:1002:100:X_console,,,:/home/xconsole:/bin/bash
Тук четем целия файл /etc/passwd и след това резултатът е подаден за обработка на командата grep, която от своя страна претърсва текста за низа xconsole и изпечатва целия ред, съдържащ този низ на екрана. Може да използвате и пренасочване, за да запишете крайния резултат на файл:
xconsole$ cat /etc/passwd | grep xconsole > foo.file
xconsole$ cat foo.file
xconsole:x:1002:100:X_console,,,:/home/xconsole:/bin/bash
Работи. Файлът /etc/passwd е прочетен и неговото съдържание е претърсено от командата grep за низа xconsole. След което крайният резултат е пренасочен към файл foo.file. Ще откриете, че пренасочване и piping са много полезни средства, когато пишете Вашите шел програми.
Временни файлове
Често ще има моменти, в които ще Ви се наложи да създадете временен файл. Този файл може да съдържа временна информация и просто да работи с някоя програма. В повечето случаи със завършването на изпълнението на програмата се изтрива и временният файл. Когато създадете файл, трябва да му зададете име. Проблемът е, че името на файла, който създавате, не трябва да съществува в директорията, в която го създавате. В противен случай може да затриете важна информация. За да създадете файл с уникално име, трябва да използвате "$$" символа като представка или наставка в името на файла. Вземете за пример следния случай: искате да създадете временен файл с име hello. Има вероятност и някой друг да има файл със същото име в тази директория, което ще доведе до катастрофални резултати за Вашата програма. Ако вместо това създадете файл с име hello.$$ или $$hello, Вие ще създадете уникален файл. Опитайте:
xconsole$ touch hello
xconsole$ ls
hello
xconsole$ touch hello.$$
xconsole$ ls
hello hello.689
Ето го и нашият временен файл.
Връщане на стойности
Повечето програми връщат стойност(и) в зависимост от начина, по който завършват изпълнението си. Например, ако разгледате ръководството на командата grep ще видите, че в него се казва, че командата grep връща стойност 0 ако има съвпадение, и 1 ако не е открито съвпадение. Защо да се грижим да връщаме стойности? По много причини. Нека да кажем, че искате да проверите дали конкретно потребителско име съществува на Вашата система. Единият от начините да направите това е да използвате командата grep върху файла с паролите /etc/passwd. Да предположим, че потребителското име, което търсим е foobar:
xconsole$ grep "foobar" /etc/passwd
xconsole$
Няма никакъв резултат от изпълнението. Това означава че grep не е намерила съвпадение. Но може да направим програмата много по-полезна ако се появява съобщение, което пояснява резултата. Това е, когато искате да проверите стойността, която се връща от дадена програма. Има една специална променлива, която съдържа крайния резултат от изпълнението на програмата. Тази променлива е $?.Разгледайте следния код:
#!/bin/bash
# grep for user foobar and pipe all output to /dev/null:
grep "foobar" /etc/passwd > /dev/null 2>&1
# capture the return value and act accordingly:
if [ "$?" -eq 0 ]; then
echo "Match found."
exit
else
echo "No match found."
fi
Когато стартираме програмата, променливата "$?" ще прихване резултата от командата grep. Ако той е равен на 0, значи има съвпадение и подходящо съобщение ще обяви за това. В противен случай ще изпечата, че няма съвпадения. Това е един основен начин за получаване на резултата, който връща дадена програма. Ще откриете, че доста често ще Ви се наложи да знаете стойността, която връща дадена програма, за да продължите по-нататък.
Ако случайно се чудите какво значи 2>&1, сега ще ви обясня . Под Linux, тези номера обозначават файлови дескриптори. 0 е за стандартния вход (пример: клавиатура), 1 е за стандартния изход (пример: монитор) и 2 е за стандартния изход на грешките (пример: монитор). Всяка обикновена информация се изпраща на файлов дескриптор 1, и ако има грешки те се изпращат на файлов дескриптор 2. Ако не искате тези съобщения да излизат просто можете да ги пренасочите към /dev/null. Забележете, че това няма да спре изпращането на информацията на стандартния изход. Например, ако нямате права да четете от директория на друг потребител, Вие няма да можете да видите нейното съдържание:
xconsole$ ls /root
ls: /root: Permission denied
xconsole$ ls /root 2> /dev/null
xconsole$
Както виждате, съобщението за грешка не беше изпечатано. Същото важи както за други програми, така и за файлов дескриптор 1. Ако не искате резултатът от изпълнението на програмата да се отпечатва на екрана, можете спокойно да го пренасочите към /dev/null. Ако не искате да виждате както резултатът от изпълнението, така и съобщенията за грешка, може да го направите по следния начин:
xconsole$ ls /root > /dev/null 2>&1
Това означава че резултатът от програмата, както и всяка грешка, която предизвика тази програма ще бъдат изпратени на /dev/null, така че никога повече няма да можете да ги видите.
Какво трябва да направите ако искате Вашият шел скрипт да връща стойност при завършване на програмата? Командата exit приема само един аргумент - число, което трябва да се върне при завършване на програмата. Обикновено числото 0 се използва, за да кажем, че програмата е завършила успешно, т.е. не е възникнала никаква грешка по време на нейното изпълнение. Всичко по-голямо или по-малко от 0 обикновено обозначава, че е възникнала някаква грешка. Това го решавате Вие като програмист. Нека проследим следната програма:
#!/bin/bash
if [ -f "/etc/passwd" ]; then
echo "Password file exists."
exit 0
else
echo "No such file."
exit 1
fi
Заключение
С това завършихме увода в bash програмирането. Това ръководство Ви дава основните знания, за да можете да редактирате чужди bash скриптове или да създавате нови. За да постигнете съвършенство обаче, трябва много да практикувате. bash е идеално средство за писане на обикновени административни скриптове. Но за по-големи разработки ще се нуждаете от мощни езици, като C или Perl.


Финско - Български разговорник/Граматика Kielioppi/Спрежение на глаголите --- Verbien taivutus

100px|border|left|Знамето на България
Nominaalimuodot
nominaalimuoto основнаформа
taivutusmuoto - спрегнатаформа
aktiivin I infinitiivin nominatiivi - инфинитивнаформа
kävellä -- вървя
aktiivin I infinitiivin translatiivin yksikön 1. persoona
kävelläkseni -- (аз) задавървя
aktiivin I infinitiivin translatiivin yksikön 2. persoona
kävelläksesi -- (ти) задавървиш
aktiivin I infinitiivin translatiivin yksikön 3. persoona
kävelläkseen -- (той ) задавърви
aktiivin I infinitiivin translatiivin monikon 1. persoona
kävelläksemme (ние) задавървим
aktiivin I infinitiivin translatiivin monikon 2. persoona
kävelläksenne (вие) задавървите
aktiivin I infinitiivin translatiivin monikon 3. persoona
kävelläkseen -- (те) задавървят
aktiivin II infinitiivin inessiivi
kävellessä --- вървейки
passiivin II infinitiivin inessiivi
käveltäessä --- пасивнаформа
"накарандавърви"
aktiivin II infinitiivin instruktiivi
kävellen -- вървейки
aktiivin III infinitiivin inessiivi
kävelemässä -- вървя (действиетосеизвършвасега , новпо-дълговреме) например
Olen juuri kävelemässä puistossa. --- Тъкмосеразхождамвпарка
aktiivin III infinitiivin elatiivi
kävelemästä --- разхождахсе (действиетоеизвършвановминалото , новпо-дълговреме)
Tulin juuri kävelemästä puistosta. --- Тъкмосевърнахотразходкатавпарка.
aktiivin III infinitiivin illatiivi
kävelemään
aktiivin III infinitiivin adessiivi
kävelemällä
aktiivin III infinitiivin abessiivi
kävelemättä
aktiivin III infinitiivin instruktiivi
kävelemän
passiivin III infinitiivin instruktiivi
käveltämän
aktiivin IV infinitiivin nominatiivi
käveleminen
aktiivin IV infinitiivin partitiivi
kävelemistä
aktiivin V infinitiivin yksikön 1. persoona
kävelemäisilläni
aktiivin V infinitiivin yksikön 2. persoona
kävelemäisilläsi
aktiivin V infinitiivin yksikön 3. persoona
kävelemäisillään
kävelemäisillänsä
aktiivin V infinitiivin monikon 1. persoona
kävelemäisillämme
aktiivin V infinitiivin monikon 2. persoona
kävelemäisillänne
aktiivin V infinitiivin monikon 3. persoona
kävelemäisillään
kävelemäisillänsä
aktiivin I partisiippi
kävelevä
passiivin I partisiippi
käveltävä
aktiivin II partisiippi
kävellyt
passiivin II partisiippi
kävelty
aktiivin agenttipartisiippi
kävelemäFiniittimuodot
finiittimuoto
myöntömuoto - положителнаформа
kieltomuoto - отрицателнаформа
aktiivin indikatiivin preesensin yksikön 1. persoona
kävelen - вървя
en kävele - невървя
aktiivin indikatiivin preesensin yksikön 2. persoona
kävelet
et kävele
aktiivin indikatiivin preesensin teitittelymuoto
kävelette
ette kävele
aktiivin indikatiivin preesensin yksikön 3. persoona
kävelee
ei kävele
aktiivin indikatiivin preesensin monikon 1. persoona
kävelemme
emme kävele
aktiivin indikatiivin preesensin monikon 2. persoona
kävelette
ette kävele
aktiivin indikatiivin preesensin monikon 3. persoona
kävelevät
eivät kävele
passiivin indikatiivin preesensin yksikön 3.
persoona
kävellään
ei kävellä
aktiivin indikatiivin preteritin yksikön 1. persoona
kävelin
en kävellyt
aktiivin indikatiivin preteritin yksikön 2. persoona
kävelit
et kävellyt
aktiivin indikatiivin preteritin teitittelymuoto
kävelitte
ette kävellyt
aktiivin indikatiivin preteritin yksikön 3. persoona
käveli
ei kävellyt
aktiivin indikatiivin preteritin monikon 1. persoona
kävelimme
emme kävelleet
aktiivin indikatiivin preteritin monikon 2. persoona
kävelitte
ette kävelleet
aktiivin indikatiivin preteritin monikon 3. persoona
kävelivät
eivät kävelleet
passiivin indikatiivin preteritin yksikön 3.
persoona
käveltiin
ei kävelty
aktiivin indikatiivin perfektin yksikön 1. persoona
olen kävellyt
en ole kävellyt
aktiivin indikatiivin perfektin yksikön 2. persoona
olet kävellyt
et ole kävellyt
aktiivin indikatiivin perfektin teitittelymuoto
olette kävellyt
ette ole kävellyt
aktiivin indikatiivin perfektin yksikön 3. persoona
on kävellyt
ei ole kävellyt
aktiivin indikatiivin perfektin monikon 1. persoona
olemme kävelleet
emme ole kävelleet
aktiivin indikatiivin perfektin monikon 2. persoona
olette kävelleet
ette ole kävelleet
aktiivin indikatiivin perfektin monikon 3. persoona
ovat kävelleet
eivät ole kävelleet
passiivin indikatiivin perfektin yksikön 3.
persoona
on kävelty
ei ole kävelty
aktiivin indikatiivin pluskvamperfektin yksikön 1.
persoona
olin kävellyt
en ollut kävellyt
aktiivin indikatiivin pluskvamperfektin yksikön 2.
persoona
olit kävellyt
et ollut kävellyt
aktiivin indikatiivin pluskvamperfektin teitittelymuoto
olitte kävellyt
ette ollut kävellyt
aktiivin indikatiivin pluskvamperfektin yksikön 3.
persoona
oli kävellyt
ei ollut kävellyt
aktiivin indikatiivin pluskvamperfektin monikon 1. persoona
olimme kävelleet
emme olleet kävelleet
aktiivin indikatiivin pluskvamperfektin monikon 2. persoona
olitte kävelleet
ette olleet kävelleet
aktiivin indikatiivin pluskvamperfektin monikon 3. persoona
olivat kävelleet
eivät olleet kävelleet
passiivin indikatiivin pluskvamperfektin
yksikön 3. persoona
oli kävelty
ei ollut kävelty
aktiivin konditionaalin preesensin yksikön 1. persoona
kävelisin
en kävelisi
aktiivin konditionaalin preesensin yksikön 2. persoona
kävelisit
et kävelisi
aktiivin konditionaalin preesensin teitittelymuoto
kävelisitte
ette kävelisi
aktiivin konditionaalin preesensin yksikön 3. persoona
kävelisi
ei kävelisi
aktiivin konditionaalin preesensin monikon 1. persoona
kävelisimme
emme kävelisi
aktiivin konditionaalin preesensin monikon 2. persoona
kävelisitte
ette kävelisi
aktiivin konditionaalin preesensin monikon 3. persoona
kävelisivät
eivät kävelisi
passiivin konditionaalin preesensin yksikön 3.
persoona
käveltäisiin
ei käveltäisi
aktiivin konditionaalin perfektin yksikön 1. persoona
olisin kävellyt
en olisi kävellyt
aktiivin konditionaalin perfektin yksikön 2. persoona
olisit kävellyt
et olisi kävellyt
aktiivin konditionaalin perfektin teitittelymuoto
olisitte kävellyt
ette olisi kävellyt
aktiivin konditionaalin perfektin yksikön 3. persoona
olisi kävellyt
ei olisi kävellyt
aktiivin konditionaalin perfektin monikon 1. persoona
olisimme kävelleet
emme olisi kävelleet
aktiivin konditionaalin perfektin monikon 2. persoona
olisitte kävelleet
ette olisi kävelleet
aktiivin konditionaalin perfektin monikon 3. persoona
olisivat kävelleet
eivät olisi kävelleet
passiivin konditionaalin perfektin yksikön 3.
persoona
olisi kävelty
ei olisi kävelty
aktiivin potentiaalin preesensin yksikön 1. persoona
kävellen
en kävelle
aktiivin potentiaalin preesensin yksikön 2. persoona
kävellet
et kävelle
aktiivin potentiaalin preesensin teitittelymuoto
kävellette
ette kävelle
aktiivin potentiaalin preesensin yksikön 3. persoona
kävellee
ei kävelle
aktiivin potentiaalin preesensin monikon 1. persoona
kävellemme
emme kävelle
aktiivin potentiaalin preesensin monikon 2. persoona
kävellette
ette kävelle
aktiivin potentiaalin preesensin monikon 3. persoona
kävellevät
eivät kävelle
passiivin potentiaalin preesensin yksikön 3.
persoona
käveltäneen
ei käveltäne
aktiivin potentiaalin perfektin yksikön 1. persoona
lienen kävellyt
en liene kävellyt
aktiivin potentiaalin perfektin yksikön 2. persoona
lienet kävellyt
et liene kävellyt
aktiivin potentiaalin perfektin teitittelymuoto
lienette kävellyt
ette liene kävellyt
aktiivin potentiaalin perfektin yksikön 3. persoona
lienee kävellyt
ei liene kävellyt
aktiivin potentiaalin perfektin monikon 1. persoona
lienemme kävelleet
emme liene kävelleet
aktiivin potentiaalin perfektin monikon 2. persoona
lienette kävelleet
ette liene kävelleet
aktiivin potentiaalin perfektin monikon 3. persoona
lienevät kävelleet
eivät liene kävelleet
passiivin potentiaalin perfektin yksikön 3.
persoona
lienee kävelty
ei liene kävelty
aktiivin eventiivin preesensin yksikön 1. persoona
kävelleisin
en kävelleisi
aktiivin eventiivin preesensin yksikön 2. persoona
kävelleisit
et kävelleisi
aktiivin eventiivin preesensin teitittelymuoto
kävelleisitte
ette kävelleisi
aktiivin eventiivin preesensin yksikön 3. persoona
kävelleisi
ei kävelleisi
aktiivin eventiivin preesensin monikon 1. persoona
kävelleisimme
emme kävelleisi
aktiivin eventiivin preesensin monikon 2. persoona
kävelleisitte
ette kävelleisi
aktiivin eventiivin preesensin monikon 3. persoona
kävelleisivät
eivät kävelleisi
passiivin eventiivin preesensin yksikön 3.
persoona
käveltäneisiin
ei käveltäneisi
aktiivin eventiivin perfektin yksikön 1. persoona
lienisin kävellyt
en lienisi kävellyt
aktiivin eventiivin perfektin yksikön 2. persoona
lienisit kävellyt
et lienisi kävellyt
aktiivin eventiivin perfektin teitittelymuoto
lienisitte kävellyt
ette lienisi kävellyt
aktiivin eventiivin perfektin yksikön 3. persoona
lienisi kävellyt
ei lienisi kävellyt
aktiivin eventiivin perfektin monikon 1. persoona
lienisimme kävelleet
emme lienisi kävelleet
aktiivin eventiivin perfektin monikon 2. persoona
lienisitte kävelleet
ette lienisi kävelleet
aktiivin eventiivin perfektin monikon 3. persoona
lienisivät kävelleet
eivät lienisi kävelleet
passiivin eventiivin perfektin yksikön 3.
persoona
lienisi kävelty
ei lienisi kävelty
aktiivin imperatiivin preesensin yksikön 1.
persoona
kävelkääni
älkääni
kävelkö
kävelkäämi
älkäämi
kävelkö
aktiivin imperatiivin preesensin yksikön 2. persoona
kävele
älä kävele
aktiivin imperatiivin preesensin teitittelymuoto
kävelkääälkää kävelkö
aktiivin imperatiivin preesensin yksikön 3. persoona
kävelköön
älköön kävelkö
aktiivin imperatiivin preesensin monikon 1. persoona
kävelkäämme
älkäämme kävelkö
aktiivin imperatiivin preesensin monikon 2. persoona
kävelkääälkää kävelkö
aktiivin imperatiivin preesensin monikon 3. persoona
kävelkööt
älkööt kävelkö
passiivin imperatiivin preesensin yksikön 3.
persoona
käveltäköön
älköön käveltäkö
aktiivin imperatiivin perfektin yksikön 1.
persoona
olkaani kävellyt
älkääni olko
kävellyt
olkaami kävellyt
älkäämi olko
kävellyt
aktiivin imperatiivin perfektin yksikön 2. persoona
ole kävellyt
älä ole kävellyt
aktiivin imperatiivin perfektin teitittelymuoto
olkaa kävellyt
älkää olko kävellyt
aktiivin imperatiivin perfektin yksikön 3. persoona
olkoon kävellyt
älköön olko kävellyt
aktiivin imperatiivin perfektin monikon 1. persoona
olkaamme kävelleet
älkäämme olko kävelleet
aktiivin imperatiivin perfektin monikon 2. persoona
olkaa kävelleet
älkää olko kävelleet
aktiivin imperatiivin perfektin monikon 3. persoona
olkoot kävelleet
älkööt olko kävelleet
passiivin imperatiivin perfektin yksikön 3.
persoona
olkoon kävelty
älköön olko kävelty
aktiivin optatiivin preesensin yksikön 1. persoona
kävellön
ällön kävele
aktiivin optatiivin preesensin yksikön 2. persoona
kävellös
ällös kävele
aktiivin optatiivin preesensin teitittelymuoto
kävelköötte
älköötte
kävelkö
aktiivin optatiivin preesensin yksikön 3. persoona
kävelköön
älköön kävelkö
aktiivin optatiivin preesensin monikon 1. persoona
kävelköömme
älköömme
kävelkö
aktiivin optatiivin preesensin monikon 2. persoona
kävelköötte
älköötte
kävelkö
aktiivin optatiivin preesensin monikon 3. persoona
kävelkööt
älkööt kävelkö
passiivin optatiivin preesensin yksikön 1.
persoona
käveltäön
ällön
käveltäkö
passiivin optatiivin preesensin yksikön 2.
persoona
käveltäös
ällös
käveltäkö
passiivin optatiivin preesensin teitittelymuoto
käveltäköötte
älköötte
käveltäkö
passiivin optatiivin preesensin yksikön 3.
persoona
käveltäköön
älköön käveltäkö
passiivin optatiivin preesensin monikon 1. persoona
käveltäköömme
älköömme
käveltäkö
passiivin optatiivin preesensin monikon 2. persoona
käveltäköötte
älköötte
käveltäkö
passiivin optatiivin preesensin monikon 3. persoona
käveltäkööt
älkööt
käveltäkö
aktiivin optatiivin perfektin yksikön 1. persoona
ollon kävellyt
ällön ollo kävellyt
aktiivin optatiivin perfektin yksikön 2. persoona
ollos kävellyt
ällös ollo kävellyt
aktiivin optatiivin perfektin teitittelymuoto
olkootte kävellyt
älköötte olko
kävellyt
aktiivin optatiivin perfektin yksikön 3. persoona
olkoon kävellyt
älköön olko kävellyt
aktiivin optatiivin perfektin monikon 1. persoona
olkoomme kävelleet
älköömme olko
kävelleet
aktiivin optatiivin perfektin monikon 2. persoona
olkootte kävelleet
älköötte olko
kävelleet
aktiivin optatiivin perfektin monikon 3. persoona
olkoot kävelleet
älkööt olko kävelleet
passiivin optatiivin perfektin yksikön 1.
persoona
oltaon kävelty
ällön oltako
kävelty
passiivin optatiivin perfektin yksikön 2.
persoona
oltaos kävelty
ällös oltako
kävelty
passiivin optatiivin perfektin teitittelymuoto
oltakootte kävelty
älköötte
oltako kävelty
passiivin optatiivin perfektin yksikön 3.
persoona
oltakoon kävelty
älköön
oltako kävelty
passiivin optatiivin perfektin monikon 1. persoona
oltakoomme kävelleet
älköömme
oltako kävelleet
passiivin optatiivin perfektin monikon 2. persoona
oltakootte kävelleet
älköötte
oltako kävelleet
passiivin optatiivin perfektin monikon 3. persoona
oltakoot kävelleet
älkööt
oltako kävelleet

Езици Фински


Падежни окончания в старобългарски

Към съдържанието на Справочник по старобългарски език
1 Глаголица
Склонение, Именно, Местоименно, Смесено
Съществителни, Прилагателни
Род, мъжки род, среден род, ж.р./м.р., женски род, м.р., ж.р., ср.р., мъжки род, женски род, среден род, мъжки род, женски род, лични местоим., мъжки род, среден род, женски род, мъжки род, среден род, женски род
Основа, -''o''-осн., -''jo''-осн., -''ŭ''-осн., -''ĭ''-осн., -''n''-основи, -''o''-осн., -''jo''-осн., -''n''-/-''nt''-осн., -''s''-основи, -''a''-осн., -''ī''-/-''ja''-осн., -''ĭ''-осн., -''ū''-основи, -''r''-основи, -''jo''-осн., -''ja''-осн., -''jo''-осн.
ед.ч., Им.п., Ⱏ, Ⱐ, Ⱏ, Ⱐ, ⰟⰉ, Ⱁ, Ⰵ, Ⱗ, Ⱁ, Ⰰ, Ⰻ,’Ⱑ, Ⱐ, ⰟⰉ, Ⰻ, Ⱐ, Ⰻ,’Ⱑ, Ⰵ, Ⱏ, Ⰰ
Род.п., Ⰰ, ’Ⱑ, Ⱆ, Ⰻ, ⰅⰐⰅ, Ⰰ, ’Ⱑ, ⰅⰐⰅ/ⰧⰕⰅ, ⰅⰔⰅ, ⰟⰉ, Ⱗ, Ⰻ, ⰟⰂⰅ, ⰅⰓⰅ, Ⰰ, Ⱗ, Ⰰ, ⰅⰃⰑ, ⰅⰧ, ⰅⰃⰑ, ⰑⰃⰑ, ⰑⰧ, Ⰵ, ⰀⰅⰃⰑ, ⰟⰉⰧ, ’ⰡⰅⰃⰑ, ⰧⰧ
Дат.п., Ⱆ, Ⱓ, ⰑⰂⰋ, Ⰻ, ⰅⰐⰋ, Ⱆ, Ⱓ, +Ⰻ, +Ⰻ, Ⱑ, Ⰻ, Ⰻ, ⰟⰂⰋ, ⰅⰓⰋ, Ⱆ, Ⰻ, Ⱆ, ⰅⰏⰖ, ⰅⰊ, ⰅⰏⰖ, ⰑⰏⰖ, ⰑⰊ, Ⱑ, ⰖⰅⰏⰖ, ⰡⰊ, ⰣⰅⰏⰖ, ⰊⰊ
Вин.п., Ⱏ, Ⱐ, Ⱏ, Ⱐ, ⰅⰐⰠ, Ⱁ, Ⰵ, Ⱗ, Ⱁ, Ⱗ, Ⱙ, Ⱐ, ⰟⰂⰠ, ⰅⰓⰠ, Ⱏ, Ⱘ, Ⰻ, Ⱙ, Ⰵ, Ⱏ, Ⱘ, Ⰵ, ⰩⰩ
Зв.п., Ⰵ, Ⱓ, Ⱆ, Ⰻ, ⰟⰉ, Ⱁ, Ⰵ, Ⱗ, Ⱁ, Ⱁ, Ⰵ, Ⰻ, ⰟⰉ, Ⰻ
Тв.п., ⰑⰏⰠ, ⰅⰏⰠ, ⰟⰏⰠ, ⰠⰏⰠ, ⰅⰐⰠⰏⰠ, ⰑⰏⰠ, ⰅⰏⰠ, +ⰠⰏⰠ, +ⰠⰏⰠ, ⰑⰩ, ⰅⰩ, ⰠⰩ, +ⰠⰩ, +ⰠⰩ, ⰅⰏⰠ, ⰅⰩ, ⰅⰏⰠ, ⰋⰏⰠ, ⰅⰩ, ⰋⰏⰠ, ⰡⰏⰠ, ⰑⰩ, ⰑⰩ, ⰟⰉⰏⰠ, ⰑⰩ, ⰊⰊⰏⰠ, ⰅⰩ
М.п., Ⱑ, Ⰻ, Ⱆ, Ⰻ, ⰅⰐⰅ, Ⱑ, Ⰻ, +Ⰵ, +Ⰵ, Ⱑ, Ⰻ, Ⰻ, ⰟⰂⰅ, ⰅⰓⰅ, Ⰻ, Ⰻ, Ⰻ, ⰅⰏⰠ, ⰅⰊ, ⰅⰏⰠ, ⰑⰏⰠ, ⰑⰊ, Ⱑ, ⰡⰅⰏⰠ, ⰡⰊ, ⰊⰅⰏⰠ, ⰊⰊ
дв.ч., Им.п., Ⰰ, ’Ⱑ, ⰟⰉ, Ⰻ, ⰅⰐⰋ, Ⱑ, Ⰻ, +Ⱑ, +Ⱑ, Ⱑ, Ⰻ, Ⰻ, ⰟⰂⰋ, ⰅⰓⰋ, Ⰰ, Ⰻ, Ⰻ, Ⱑ, Ⰻ, Ⰻ, Ⰰ, Ⱑ, ⰀⰡ, ⰡⰊ, ⰡⰊ, ’ⰡⰡ, ⰋⰊ
Род.п., Ⱆ, Ⱓ, ⰑⰂⰖ, ⰠⰣ, ⰅⰐⰖ, Ⱆ, Ⱓ, +Ⱆ, +Ⱆ, Ⱆ, Ⱓ, ⰠⰣ, ⰟⰂⰖ, ⰅⰓⰖ, Ⱆ, Ⱆ, Ⱆ, ⰅⰣ, ⰑⰣ, ⰀⰣ, ⰖⰣ, ⰣⰣ
Дат.п., ⰑⰏⰀ, ⰅⰏⰀ, ⰟⰏⰀ, ⰠⰏⰀ, ⰅⰐⰠⰏⰀ, ⰑⰏⰀ, ⰅⰏⰀ, +ⰠⰏⰀ, +ⰠⰏⰀ, ⰀⰏⰀ, ’ⰡⰏⰀ, ⰠⰏⰀ, +ⰀⰏⰀ, +ⰠⰏⰀ, ⰅⰏⰀ, ⰀⰏⰀ, ⰅⰏⰀ, ⰋⰏⰀ, ⰡⰏⰀ, ⰀⰏⰀ, ⰟⰉⰏⰀ, ⰋⰊⰏⰀ
Вин.п., Ⰰ, ’Ⱑ, ⰟⰉ, Ⰻ, ⰅⰐⰋ, Ⱑ, Ⰻ, +Ⱑ, +Ⱑ, Ⱑ, Ⰻ, Ⰻ, ⰟⰂⰋ, ⰅⰓⰋ, Ⰰ, Ⰻ, Ⰻ, Ⱑ, Ⰻ, Ⰻ, Ⰰ, Ⱑ, Ⰰ, ⰀⰡ, ⰡⰊ, ⰡⰊ, ’ⰡⰡ, ⰋⰊ
Зв.п., Ⰰ, ’Ⱑ, ⰟⰉ, Ⰻ, ⰅⰐⰋ, Ⱑ, Ⰻ, +Ⱑ, +Ⱑ, Ⱑ, Ⰻ, Ⰻ, ⰟⰂⰋ, ⰅⰓⰋ
Тв.п., ⰑⰏⰀ, ⰅⰏⰀ, ⰟⰏⰀ, ⰠⰏⰀ, ⰅⰐⰠⰏⰀ, ⰑⰏⰀ, ⰅⰏⰀ, +ⰠⰏⰀ, +ⰠⰏⰀ, ⰀⰏⰀ, ’ⰡⰏⰀ, ⰠⰏⰀ, +ⰀⰏⰀ, +ⰠⰏⰀ, ⰅⰏⰀ, ⰀⰏⰀ, ⰅⰏⰀ, ⰋⰏⰀ, ⰡⰏⰀ, ⰀⰏⰀ, ⰟⰉⰏⰀ, ⰋⰊⰏⰀ
М.п., Ⱆ, Ⱓ, ⰑⰂⰖ, ⰠⰣ, ⰅⰐⰖ, Ⱆ, Ⱓ, +Ⱆ, +Ⱆ, Ⱆ, Ⱓ, ⰠⰣ, ⰟⰂⰖ, ⰅⰓⰖ, Ⱆ, Ⱆ, Ⱆ, ⰅⰣ, ⰑⰣ, ⰀⰣ, ⰖⰣ, ⰣⰣ
мн.ч., Им.п., Ⰻ, ’Ⰻ, ⰑⰂⰅ, ⰠⰅ, ⰅⰐⰅ, Ⰰ, ’Ⱑ, +Ⰰ, +Ⰰ, ⰟⰉ, Ⱗ, Ⰻ, ⰟⰂⰋ, ⰅⰓⰋ, Ⰵ, Ⱗ, Ⰰ, Ⰻ, ⰟⰉ, Ⰰ, Ⰻ, ⰟⰉ, ⰋⰊ, ⰀⰡ, ⰟⰉⰧ, ⰋⰊ, ’ⰡⰡ, ⰧⰧ
Род.п., Ⱏ, Ⱐ, ⰑⰂⰟ, ⰠⰊ, ⰅⰐⰅ, Ⱏ, Ⱐ, +Ⱏ, +Ⱏ, Ⱏ, Ⰻ, ⰠⰊ, ⰟⰂⰟ, ⰅⰓⰟ, Ⱐ, Ⱐ, Ⱐ, ⰋⰘⰟ, ⰡⰘⰟ, ⰀⰔⰟ, ⰟⰉⰘⰟ, ⰋⰊⰘⰟ
Дат.п., ⰑⰏⰟ, ⰅⰏⰟ, ⰟⰏⰟ, ⰠⰏⰟ, ⰅⰐⰠⰏⰟ, ⰑⰏⰟ, ⰅⰏⰟ, +ⰠⰏⰟ, +ⰠⰏⰟ, ⰀⰏⰟ, ’ⰡⰏⰟ, ⰠⰏⰟ, +ⰀⰏⰟ, +ⰠⰏⰟ, ⰅⰏⰟ, ⰀⰏⰟ, ⰅⰏⰟ, ⰋⰏⰟ, ⰡⰏⰟ, ⰀⰏⰟ, ⰟⰉⰏⰟ, ⰋⰊⰏⰟ
Вин.п., ⰟⰉ, ’Ⱗ, ⰟⰉ, Ⰻ, ⰅⰐⰋ, Ⰰ, ’Ⱑ, +Ⰰ, +Ⰰ, ⰟⰉ, Ⱗ, Ⰻ, ⰟⰂⰋ, ⰅⰓⰋ, Ⱗ, Ⱗ, Ⰰ, Ⱗ, Ⱗ, ’Ⱑ, Ⰻ, ⰟⰉ, ⰀⰔⰟ, ⰟⰉⰧ, ⰀⰡ, ⰟⰉⰧ, ⰧⰧ, ’ⰡⰡ, ⰧⰧ
Зв.п., Ⰻ, ’Ⰻ, ⰑⰂⰅ, ⰠⰅ, ⰅⰐⰅ, Ⰰ, ’Ⱑ, +Ⰰ, +Ⰰ, ⰟⰉ, Ⱗ, Ⰻ, ⰟⰂⰋ, ⰅⰓⰋ
Тв.п., ⰟⰉ, Ⰻ, ⰟⰏⰋ, ⰠⰏⰋ, ⰅⰐⰠⰏⰋ, ⰟⰉ, Ⰻ, +ⰟⰉ, +ⰟⰉ, ⰀⰏⰋ, ’ⰡⰏⰋ, ⰠⰏⰋ, +ⰀⰏⰋ, +ⰠⰏⰋ, Ⰻ, ⰀⰏⰋ, Ⰻ, ⰋⰏⰋ, ⰡⰏⰋ, ⰀⰏⰋ, ⰟⰉⰏⰋ, ⰋⰊⰏⰋ
М.п., ⰡⰘⰟ, ⰋⰘⰟ, ⰟⰘⰟ, ⰠⰘⰟ, ⰅⰐⰟⰘⰟ, ⰡⰘⰟ, ⰋⰘⰟ, +ⰠⰘⰟ, +ⰠⰘⰟ, ⰀⰘⰟ, ’ⰡⰘⰟ, ⰠⰘⰟ, +ⰀⰘⰟ, +ⰠⰘⰟ, ⰋⰘⰟ, ⰀⰘⰟ, ⰋⰘⰟ, ⰋⰘⰟ, ⰡⰘⰟ, ⰀⰔⰟ, ⰟⰉⰘⰟ, ⰋⰊⰘⰟ
2 Кирилица
Склонение, Именно, Местоименно, Смесено
Съществителни, Прилагателни
Род, мъжки род, среден род, ж.р./м.р., женски род, м.р., ж.р., ср.р., мъжки род, женски род, среден род, мъжки род, женски род, лични местоим., мъжки род, среден род, женски род, мъжки род, среден род, женски род
Основа, -''o''-осн., -''jo''-осн., -''ŭ''-осн., -''ĭ''-осн., -''n''-основи, -''o''-осн., -''jo''-осн., -''n''-/-''nt''-осн., -''s''-основи, -''a''-осн., -''ī''-/-''ja''-осн., -''ĭ''-осн., -''ū''-основи, -''r''-основи, -''jo''-осн., -''ja''-осн., -''jo''-осн.
ед.ч., Им.п., Ъ, Ь, Ъ, Ь, ЪI, О, Е, Ѧ, О, А, И,’Ѣ, Ь, ЪI, И, Ь, И,’Ѣ, Е, Ъ, А
Род.п., А, ’Ѣ, У, И, ЕНЕ, А, ’Ѣ, ЕНЕ/ѦТЕ, ЕСЕ, ЪI, Ѩ, И, ЪВЕ, ЕРЕ, А, Ѧ, А, ЕГО, ЕѨ, ЕГО, ОГО, ОѨ, Е, АЕГО, ЪIѨ, ’ѢЕГО, ѨѨ
Дат.п., У, Ю, ОВИ, И, ЕНИ, У, Ю, +И, +И, Ѣ, И, И, ЪВИ, ЕРИ, У, И, У, ЕМУ, ИЕ, ЕМУ, ОМУ, ОИ, Ѣ, УЕМУ, ѢИ, ЮЕМУ, ИИ
Вин.п., Ъ, Ь, Ъ, Ь, ЕНЬ, О, Е, Ѧ, О, Ѧ, Ѭ, Ь, ЪВЬ, ЕРЬ, Ъ, Ѫ, И, Ѭ, Е, Ъ, Ѫ, Е, ѬѬ
Зв.п., Е, Ю, У, И, ЪI, О, Е, Ѧ, О, О, Е, И, ЪI, И
Тв.п., ОМЬ, ЕМЬ, ЪМЬ, ЬМЬ, ЕНЬМЬ, ОМЬ, ЕМЬ, +ЬМЬ, +ЬМЬ, ОѬ, ЕѬ, ЬѬ, +ЬѬ, +ЬѬ, ЕМЬ, ЕѬ, ЕМЬ, ИМЬ, ЕѬ, ИМЬ, ѢМЬ, ОѬ, ОѬ, ЫМЬ, ОѬ, ИИМЬ, ЕѬ
М.п., Ѣ, И, У, И, ЕНЕ, Ѣ, И, +Е, +Е, Ѣ, И, И, ЪВЕ, ЕРЕ, И, И, И, ЕМЬ, ЕИ, ЕМЬ, ОМЬ, ОИ, Ѣ, ѢЕМЬ, ѢИ, ИЕМЬ, ИИ
дв.ч., Им.п., А, ’Ѣ, ЪI, И, ЕНИ, Ѣ, И, +Ѣ, +Ѣ, Ѣ, И, И, ЪВИ, ЕРИ, А, И, И, Ѣ, И, И, А, Ѣ, АѢ, ѢИ, ѢИ, ’ѢѢ, ИИ
Род.п., У, Ю, ОВУ, ЬЮ, ЕНУ, У, Ю, +У, +У, У, Ю, ЬЮ, ЪВУ, ЕРУ, У, У, У, ЕЮ, ОЮ, АЮ, УЮ, ЮЮ
Дат.п., ОМА, ЕМА, ЪМА, ЬМА, ЕНЬМА, ОМА, ЕМА, +ЬМА, +ЬМА, АМА, ’ѢМА, ЬМА, +АМА, +ЬМА, ЕМА, АМА, ЕМА, ИМА, ѢМА, АМА, ЫМА, ИИМА
Вин.п., А, ’Ѣ, ЪI, И, ЕНИ, Ѣ, И, +Ѣ, +Ѣ, Ѣ, И, И, ЪВИ, ЕРИ, А, И, И, Ѣ, И, И, А, Ѣ, А, АѢ, ѢИ, ѢИ, ’ѢѢ, ИИ
Зв.п., А, ’Ѣ, ЪI, И, ЕНИ, Ѣ, И, +Ѣ, +Ѣ, Ѣ, И, И, ЪВИ, ЕРИ
Тв.п., ОМА, ЕМА, ЪМА, ЬМА, ЕНЬМА, ОМА, ЕМА, +ЬМА, +ЬМА, АМА, ’ѢМА, ЬМА, +АМА, +ЬМА, ЕМА, АМА, ЕМА, ИМА, ѢМА, АМА, ЫМА, ИИМА
М.п., У, Ю, ОВУ, ЬЮ, ЕНУ, У, Ю, +У, +У, У, Ю, ЬЮ, ЪВУ, ЕРУ, У, У, У, ЕЮ, ОЮ, АЮ, УЮ, ЮЮ
мн.ч., Им.п., И, ’И, ОВЕ, ЬЕ, ЕНЕ, А, ’Ѣ, +А, +А, ЪI, Ѩ, И, ЪВИ, ЕРИ, Е, Ѧ, А, И, ЪI, А, И, ЪЙ, ИИ, АѢ, ЪЙѨ, ИИ, ’ѢѢ, ѨѨ
Род.п., Ъ, Ь, ОВЪ, ЬИ, ЕНЕ, Ъ, Ь, +Ъ, +Ъ, Ъ, И, ЬИ, ЪВЪ, ЕРЪ, Ь, Ь, Ь, ИХЪ, ѢХЪ, АСЪ, ЫХЪ, ИИХЪ
Дат.п., ОМЪ, ЕМЪ, ЪМЪ, ЬМЪ, ЕНЬМЪ, ОМЪ, ЕМЪ, +ЬМЪ, +ЬМЪ, АМЪ, ’ѢМЪ, ЬМЪ, +АМЪ, +ЬМЪ, ЕМЪ, АМЪ, ЕМЪ, ИМЪ, ѢМЪ, АМЪ, ЫМЪ, ИИМЪ
Вин.п., ЪI, ’Ѧ, ЪI, И, ЕНИ, А, ’Ѣ, +А, +А, ЪI, Ѩ, И, ЪВИ, ЕРИ, Ѧ, Ѧ, А, Ѩ, Ѩ, ’Ѣ, И, ЪI, АСЪ, ЪIѨ, АѢ, ЪIѨ, ѨѨ, ’ѢѢ, ѨѨ
Зв.п., И, ’И, ОВЕ, ЬЕ, ЕНЕ, А, ’Ѣ, +А, +А, ЪI, Ѩ, И, ЪВИ, ЕРИ
Тв.п., ЪI, И, ЪМИ, ЬМИ, ЕНЬМИ, ЪI, И, +ЪI, +ЪI, АМИ, ’ѢМИ, ЬМИ, +АМИ, +ЬМИ, И, АМИ, И, ИМИ, ѢМИ, АМИ, ЫМИ, ИИМИ
М.п., ѢХЪ, ИХЪ, ЪХЪ, ЬХЪ, ЕНЪХЪ, ѢХЪ, ИХЪ, +ЬХЪ, +ЬХЪ, АХЪ, ’ѢХЪ, ЬХЪ, +АХЪ, +ЬХЪ, ИХЪ, АХЪ, ИХЪ, ИХЪ, ѢХЪ, АСЪ, ЫХЪ, ИИХЪ