See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Bash — Уикипедия

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


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -