Bash

от Уикипедия, свободната енциклопедия
Направо към: навигация, търсене

Bash е UNIX shell написан от Брайън Фокс за проекта GNU като свободен софтуер, който да замести Bourne shell (sh).

Самото име е едновременно акроним, игра на думи и описаниие. Като акроним произлиза от Bourne-again shell „възродена обвивка“ или „отново обвивка на Борн“.

Въведение[редактиране | edit source]

В системите на основата на UNIX, командният интерпретатор изпълнява функцията на преводач между потребителя и ядрото на операционната система. Дълго време това е бил основният и най-добър начин за работа с UNIX. За разлика от създадените много по-късно системи с графичен интерфейс като Windows и MacOS, работата с командните интерпретатори се осъществява посредством текстови команди. Те могат да бъдат външни (в отделни изпълними файлове) или вградени в интерпретатора (builtins).

Предшественици[редактиране | edit source]

Един от първите командни интерпретатори за UNIX е Bourne shell (sh). Той носи името си от своя създател Стивън Борн и е бил включен в UNIX Версия 7 през 1979 година. Друг широко разпространен интерпретатор е C shell (csh), написан от Бил Джой в калифорнийския университет Бъркли като част от операционната система BSD. Със синтаксис подобен на езика C, C shell е изключително удобен и лесен за научаване от UNIX програмисти. За съжаление той е несъвместим с Bourne shell. Първият съществен опит за подобряване на възможностите на Bourne shell е интерпретаторът ksh (Korn Shell). Той съчетава нови възможности и съвместимост с Bourne shell.

Роден отново[редактиране | edit source]

Създаден като част от проекта ГНУ, Bash (Bourne-Again Shell) е един от най-популярните командни интерпретатори в UNIX. Базира се на небезизвестния sh (Bourne Shell) като също така взаимства функционалност от ksh (Korn Shell) и csh (C Shell). Официално е започнат през 10 януари 1988 г. от Брайън Фокс към който по-късно се присъединява и Чет Рами. През 1995 г. Чет започва работа над Bash 2.0 официално обявен на 23 декември 1996 г. Bash посредством своя синтаксис и вградени команди предоставя възможност за програмиране. Той може да изпълнява команди както от командния ред, така и от външен файл. Синтаксисът му е един и същ независимо от къде чете командите. Мощта на програмирането на Bash не се състои толкова в ключовите му думи и конструкции, колкото в набора от десетките програми като sed, awk, grep, cut и др. които са незаменима част от UNIX.


Клавишни комбинации[редактиране | edit source]

Следните клавишни комбинации работят при употребата на настройки под подразбиране на (Emacs). Vi-bindings can be enabled by running < code>set -o vi

Отбе: For shortcuts involving Alt, you may be able to use Esc instead.

  • Tab  : Автоматично допълване след курсора
  • Ctrl+a : скача към началото на линията на курсора (еквивалентен на Home)
  • Ctrl+b : премества курсора един знак назад (еквивалентен на )
  • Ctrl+c : изпраща SIGINT сигнал до настоящата задача, преостановявайки изплънението и и затваряйки я
  • Ctrl+d
    • изпраща EOF маркер, което прекратява изпълнението на настоящия шел
    • ако има текст на настоящия ред изтрива знака под курсора ( еквивалентен на Delete).
  • Ctrl+e : (end) moves the cursor to the line end (equivalent to the key End).
  • Ctrl+f : премести курсора един знак напред (еквивалентен на ).
  • Ctrl+g : преустановява търсене от историята и възтановява първоначалния ред
  • Ctrl+h : изтрива предния знак (еквивалентен на натискането на backspace клавиша).
  • Ctrl+i : еквивалентен на tab клавиша
  • Ctrl+j : еквивалентен на enter клавиша
  • Ctrl+k : изтрива съдържанието на реда след курсора и го копира в клипборда
  • Ctrl+l : изтрива съдържанието на терминала (еквивалентен на clear).
  • Ctrl+n : (next) изваждане на следващата команда (еквивалентен на ).
  • Ctrl+o : изпълнява намерената команда от историята, и изтегля следващия ред относителен на текущия ред от историята
  • Ctrl+p : (previous) извежда предишната команда (еквивалентен на )
  • Ctrl+r : (research) извежда последната команда използвайки въведените знаци като търсещ аргумент - следващото натискане на Ctrl+r клавишна комбинация извежда следващото попадение на търсещия аргумент
  • Ctrl+s : прескача обратно до следващата команда от търсенето назад в историята
  • Ctrl+t : транспонира предишните два знака
  • Ctrl+u : изтрива съдържанието на командния ред преди курсора и го копира във клипборда
  • Ctrl+v : ако последващото въвеждане е съIf the next input is also a control sequence, type it literally (e. g. * Ctrl+v Ctrl+h types "^H", a literal backspace.)
  • Ctrl+w : Изтрива думата преди курсора и я копира в клипборда
  • Ctrl+x Ctrl+e : редактира текущия команден ред в $EDITOR програмата , export VISUAL=vim
  • Ctrl+x Ctrl+r : чете съдържанието на inputrc файла, and и прилага конфигурираните там клавишни комбинации, настройки и зададени стойности на променливи
  • Ctrl+x Ctrl+u : Последователно премахване на последното действие ( от англ. undo ), отделно запаметени за всеки отделен ред
  • Ctrl+x Ctrl+v : Изведи настоящата версия на bash


Навигация в Bash[редактиране | edit source]

Съществуват някои основни принципи в навигацията на шела, които след заучаването важат и за множество текстови редактори и други *nix програми. За командите man и less, както и vi важат следните клавиши.

  • J — предвижване надолу
  • К — предвижване нагоре
  • L — предвижване надясно
  • H — предвижване наляво
  • Space — една страница надолу
  • q — от "quit" излизане от режима
  • Ctrl+Z — скриване, преустановяване на текущата работа (job) на "фона"
  • fg — връщане към скритата работа от "фона"
  • clear ; anotherCommand — две или повече команди могат да бъдат изпълнени на един ред, ако има ";" помежду им

Примери за синтаксиса на Bash скриптове[редактиране | edit source]

Преди да започване редакцията на файл, които ще представлява изпълним скрипт съдържащ поредица от команди на Операционната система трябва да се окаже изпълнимостта му. Т.е. ако името на файла е myFirstScript.sh , следната команда изпълнена в директорията на скрипта ще го направи изпълним:

chmod u+x myFirstScript.sh

Това може да бъде лесно проверено с командата ls -al

В случай, че се зарежда изпълним файл които съдържа Bash код, в началото му трябва да се укаже пътя към интерпретатора по следния начин:

#!/път/към/bash

За разлика от езици като C, C++, Java и др. при Bash кода не се компилира, а се интерпретира така както е подаден. Типичен пример за една Bash програма е следният:

 #!/usr/local/bin/bash
 echo "Здравей, Свят!"

Кодът може да се коментира със # например:

echo "hello" # Отпечатай hello
# прекъсни програмата
exit

В Bash Може да създавате променливи и функции. Типа на променливите не е задължителен, но при нужда може да се укаже посредством вградената команда declare. Променлива се декларира по следния начин:

ime_promenliva="stoinost na promenlivata"

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

echo $ime_promenliva

Има няколко начина за създаване на фунции. Единият е чрез ключовата дума function:

function ime_funciq {
  # kod na funciq
}

Или със скоби по следния начин:

ime_funciq() {
  # kod na funciq
}

Функциите се извикват само с името им, без скоби или допълнителни символи в началото, например:

ime_funciq "параметър 1" "параметър 2" три четири 5

Параметрите подадени на функцията се разполагат от $1 до $n където n е число и е последен параметър. Те могат да се изместват с вградената команда shift, например:

echo $1
shift 2
# $3 става $1

Логика и изражения в синтаксиса Bash[редактиране | edit source]

Цифрови сравнения[редактиране | edit source]

За простота e използвано често използваното съкращение int , което произлиза от англ. integer --- цяло число:

int1 -eq int2      Връща True ако int1 е равно на int2
int1 -ge int2   Връща True ако int1 е по-голямо или равно на int2.
int1 -gt int2   Връща True ако int1 е по-голямо от int2.
int1 -le int2   Връща True ако int1 е по-малко или равно от int2
int1 -lt int2   Връща True ако int1 е по-малко от int2
int1 -ne int2   Връща True ако int1 не е равно на int2

Сравнения на низове[редактиране | edit source]

На английски string, което се съкращава str означава низ.

str1 = str2        Връща True ако str1 е идентична на str2.
str1 != str2       Връща True ако str1 не е идентична на str2.
str             Връща True ако str не е null (т.е. празен)
-n str          Връща True if дължината на str е по-голяма от null
(null означава липса на стойност или нищо )
-z str           Връща True ако дължината на str е равна на 0 . (0 е различна от null)

погледнете още[редактиране | edit source]

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