Bash е UNIX shell написан от Брайън Фокс за проекта GNU като свободен софтуер, който да замести Bourne shell (sh).
Самото име е едновременно акроним, игра на думи и описание. Като акроним произлиза от Bourne-again shell „възродена обвивка“ или „отново обвивка на Борн“.
В UNIX-базираните системи командният интерпретатор изпълнява функцията на преводач между потребителя и ядрото на операционната система. Дълго време това е бил основният и най-добър начин за работа с UNIX. За разлика от създадените много по-късно системи с графичен интерфейс като Windows и MacOS, работата с командните интерпретатори се осъществява посредством текстови команди. Те могат да бъдат външни (в отделни изпълними файлове) или вградени в интерпретатора (builtins).
Един от първите командни интерпретатори за UNIX е Bourne shell (sh). Той носи името си от своя създател Стивън Борн и е бил включен в UNIX Версия 7 през 1979 година. Друг широко разпространен интерпретатор е C shell (csh), написан от Бил Джой в Калифорнийския университет в Бъркли като част от операционната система BSD. Със синтаксис подобен на езика C, C shell е изключително удобен и лесен за научаване от UNIX програмисти. Той е несъвместим с Bourne shell. Първият съществен опит за подобряване на възможностите на Bourne shell е интерпретаторът ksh (Korn Shell). Той съчетава нови възможности и съвместимост с Bourne shell.
Създаден като част от проекта ГНУ, 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.
Следните клавишни комбинации работят при употребата на настройки под подразбиране на (Emacs).
Забележка: За тези случаи, при които се включва бутона Alt, може да използвате и Esc.
clear
).
Съществуват някои основни принципи в навигацията на шела, които след заучаването важат и за множество текстови редактори и други *nix програми. За командите man и less, както и vi важат следните клавиши.
Преди да започване редакцията на файл, които ще представлява изпълним скрипт съдържащ поредица от команди на Операционната система трябва да се окаже изпълнимостта му. Т.е. ако името на файла е 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
За простота е използвано честото съкращение 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
На английски 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)