Bash
от Уикипедия, свободната енциклопедия
Bash или Bourne Again Shell (игра на думи: „възродена обвивка“ или „отново обвивка на Борн“) е команден интерпретатор (обвивка), използван предимно в подобните на UNIX операционни системи.
Съдържание |
[редактиране] Въведение
В системите на основата на 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.
[редактиране] Навигация в Bash
Съществуват някои основни принципи в навигацията на шела, които след заучаването важат и за множество текстови редактори и други *nix програми. За командите man и less, както и vi важат следните клавиши.
J -- предвижване на долу К -- предвижване на горе L -- предвижване на ляво H -- предвижване на дясно Space -- една страница на долу q --- от ( quit ) излизане от режима Ctrl + Z -- скриване , преустановяване на текущата работа (job) на "фона" fg -- връщане към скритата работа от "фона" clear ; anotherCommand --- две или повече команди могат да бъдат изпълнени на един ред ако съществува ; помежду им Ctrl + C --- спиране изпълнението на текуща команда
[редактиране] Примери за синтаксиса на Bash скриптове
Преди започване редакцията на файл, които ще представлява изпълним скрипт съдържащ поредица от команди на Операционната система трябва да се окаже изпълнимостта му. Т.е. ако името на файла е 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
[редактиране] Цифрови сравнения
За простота e използванo често използванoто съкращение 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)
[редактиране] Примери за команди изпълнени под Bash
ls -a -X -1 --- листване на всички файлове вертикално с всичките им изпълними атрибути ls -al | less --- същото със стопиране на екрана history | grep cd -- пример за пренасочване на изходен поток от данни от командата history , която показва последните .... команди изпълнени в шела в програмата grep , която филтрира и показва редовете съдържащи cd низа !345 --- изпълнение на команда номер 345 от историята на командите command > command_output.txt --- създаване на файла command_output.txt от изходният поток (резултата на командатата command ) find / -name "filename" --- намери файл с името "filename" от започвайки търсенето рекурсивно от / директорията find . -name linux | grep bash | less --- намери всички файлове които съдържат низа "linux" в името си , филтрирай ги така , че покажи само редовете съдържащи низа "bash" и филтрирай последно през less командата за по - лесно виждане alias ls='ls -1 -X --color=tty' --- създаване на алиаз Ctrl + A --- отиване в началото на реда Ctrl + E --- отиване в края на реда mkdir /mnt/usbflash --- създаване на /mnt/usbflash директорията mount /dev/sdb1 -t vfat /mnt/usbflash --- свързване на преносим носител за данни с vfat тип файлова система umount /mnt/usbflash --- отвързване на файловата система cat history.txt | mail -s "test file sending" -c someEmail(a)abv.bg some.otherEmail.com ---- изпращане на файлът history.txt , чрез програмата mail с заглавие "test file sending" до посочените адреси head -n 20 tooLongFile -- показване на първите 20 реда от файл vim /etc/bashrc --- промяна на промпта #find all xml type of files and display only the rows having wordToFindInRow find . -name '*.xml' -exec cat {} \;| grep wordToFindInRow | less #Tърси всички файлове които съдържат низа bash в името си и представи само фаиловете и редовете съдържащи низа tty find / -name '*bash*' -exec grep -nH tty {} \; PS1="\u@\h \t \w\n\\$ " --- различен вид промпт от този под подразбиране $ for file in `ls -R` ; do cp $file $file.bak; done --- копирай всеки един файл под текущата директория с именафайл.bak gunzip *file.zip tar -xvf file.tar --- разпакетиране на ципиран файл man commandToFindHelpAbout | col -b >/var/man/mancommandToFindHelpAbout.man.txt
eb:Bash