Bash
| Bash | ||
|---|---|---|
| část pláště | ||
|
| ||
|
Snímek obrazovky relace Bash pořízené na GNU/Linux | ||
| Obecná informace | ||
| typ programu | svobodný software | |
| Autor | Brian Fox | |
| vývojář | Projekt GNU | |
| První vydání | 8. června 1989 | |
| Licence | GPLv3 | |
| Jazyky | Vícejazyčný ( gettext ) | |
| Technické informace | ||
| Naplánováno v | C | |
| Podporované platformy | Multiplatformní | |
| Verze | ||
| Nejnovější stabilní verze | 5.2 ( info ) (26. září 2022 (18 dní)) | |
| čitelné soubory | ||
| bash-script | ||
| Odkazy | ||
GNU Bash nebo jednoduše Bash ( Bourne -a gain shell ) je oblíbené uživatelské rozhraní příkazového řádku , konkrétně unixové prostředí ; stejně jako skriptovací jazyk . Bash byl původně napsán Brianem Foxem pro operační systém GNU a měl být svobodnou softwarovou náhradou za Bourne shell . [ 1 ] [ 2 ] Poprvé vydán v roce 1989 [ 3 ] byl široce používán jako výchozí interpret přihlášení pro většinu distribucí GNU/Linux a také pro Mac OS. X od společnosti Apple až po verzi 10.15. [ 4 ] K dispozici je také verze pro Windows 10 a Android . [ 5 ] Je to také výchozí uživatelský shell v Solaris 11 . [ 6 ]
Bash je shell , který obvykle běží v textovém okně , kde uživatel zadává příkazy v textovém režimu. Bash může také číst a spouštět příkazy ze souboru, nazývaného skript nebo 'script' . Stejně jako všechny Unixové interprety podporuje seskupování názvů (shoda zástupných znaků), roury , zde dokumenty , substituce příkazů , proměnné a řídicí struktury pro testy podmínek a iterací . Vyhrazená slova , syntaxe , proměnné s dynamickým rozsahem a další základní jazykové vlastnosti jsou zkopírovány z sh . Další funkce, například historie , jsou zkopírovány z csh a ksh . Bash je shell kompatibilní s POSIX , ale s různými rozšířeními.
Jméno skořápky je zkratkou pro 'Bourne-again shell', slovní hříčka na jméno Bourne shell, kterou nahrazuje [ 7 ] , a pojem "znovu narozen" (znovu narozen). [ 8 ] [ 9 ]
Bezpečnostní díra v Bash datovaná do verze 1.03 (srpen 1989), [ 10 ] pojmenovaná Shellshock , byla objevena na začátku září 2014 a získala širokou pozornost médií. Rychle to vyvolalo sérii kybernetických útoků na internetu . [ 11 ] [ 12 ] [ 13 ] Záplaty pro opravu chyb byly zpřístupněny krátce poté, co byly chyby identifikovány.
Historie
Brian Fox začal kódovat Bash 10. ledna 1988 [ 14 ] poté , co byl Richard Stallman nespokojený s nedostatečným pokrokem předchozího vývojáře. [ 15 ] Stallman a Free Software Foundation (FSF) zvažovali bezplatný interpret, který by mohl spouštět existující skripty shellu tak strategické pro zcela svobodný systém vytvořený z kódu BSD a GNU, že to byl jeden z mála projektů, které sami financovali, s Fox vykonávat práci jako zaměstnanec FSF. [ 15 ] [ 16 ] Fox vydal Bash jako beta verzi .99 8. června 1989 [ 3 ] a zůstal hlavním přispěvatelem až do poloviny roku 1992 [ 17 ] a poloviny roku 1994, [ 18 ] , kdy byl vyhozen z FSF [ 19 ] a jeho odpovědnost byla převedena na dalšího prvního přispěvatele, Cheta Rameyho. [ 20 ] [ 21 ] [ 22 ]
Od té doby se Bash stal nejoblíbenějším shellem mezi uživateli distribucí GNU/Linux a stal se výchozím interaktivním shellem v různých distribucích GNU/Linux (s distribucemi odkazujícími na jakýkoli operační systém, jehož jádro má jako jádro) linuxu) [ 23 ] [ 24 ] (ačkoli interpret Almquist může být výchozím skriptovacím interpretem) a ve verzích MacOS společnosti Apple před Catalinou v říjnu 2019. [ 25 ] [ 26 ] [ 27 ] Bash byl také přenesen na Microsoft Windows a distribuován s Cygwin a MinGW , pro DOS projektem DJGPP , pro Novell NetWare a pro Android prostřednictvím různých aplikací pro emulaci terminálu.
V září 2014 objevil Unix/Linux specialista Stéphane Chazelas [ 28 ] bezpečnostní chybu v programu. Chyba, poprvé odhalená 24. září, se jmenovala Shellshock a měla čísla CVE-2014-6271 , CVE-2014-6277 [ 29 ] a CVE-2014-7169 . Chyba byla považována za závažnou, protože CGI skripty používající Bash mohly být zranitelné a umožňovaly spuštění libovolného kódu . Chyba souvisela se způsobem, jakým Bash předává definice funkcí subshellům prostřednictvím proměnných prostředí . [ 30 ]
Bash syntaxe
Syntaxe příkazu Bash je nadmnožinou příkazů založených na syntaxi Bourne interpretu. Definitivní specifikaci syntaxe příkazu Bash lze nalézt v referenční příručce Bash distribuované projektem GNU. Tato část zdůrazňuje některé z jeho jedinečných funkcí.
Většinu Bourne shell skriptů ('shell scripts ' ) může Bash spouštět beze změny, s výjimkou těch Bourne shell nebo shell skriptů, které odkazují na speciální Bourneovy proměnné nebo používají interní Bourneovo pořadí. Syntaxe příkazů Bash zahrnuje nápady vypůjčené z interpretů Korn shellu (ksh) a C shellu (csh), jako je editace příkazového řádku, historie příkazů, zásobník adresářů, proměnné $RANDOM a $PPID a syntaxe substituce příkazu POSIX : $(. ..) . Při použití jako interaktivní shell poskytuje Bash automatické doplňování názvů programů, názvů souborů, názvů proměnných atd., když uživatel stiskne klávesu TAB.
Bashova syntaxe má mnoho rozšíření, které Bourne interpret neposkytuje. Několik z výše uvedených rozšíření je uvedeno níže.
Přístup k argumentům
Bash skripty obdrží argumenty, které předáte shellu jako $1, $2, …, $n. Celkový počet argumentů můžete získat pomocí symbolu $#.
Pomocí $# je možné zkontrolovat počet argumentů daných skriptu, než s nimi něco uděláte:
if [ $# -lt 2 ] ; pak
echo "Musíte předat dva argumenty."
výstup 1
fi
Dalším způsobem, jak získat přístup k argumentům, je pole $ @ , pomocí kterého můžete iterovat všechny dané argumenty:
pro arg v " $@ "
do
echo " $arg "
hotovo
Matematické operace s celými čísly
Hlavním omezením Bourne interpretu je, že nemůže provádět celočíselné výpočty bez spuštění externího procesu. Místo toho může proces Bash provádět celočíselné výpočty pomocí příkazu ((...)) a syntaxe proměnné $[...] takto:
VAR = 55 # Přiřadí celočíselnou hodnotu 55 proměnné VAR.
(( VAR = VAR + 1 )) # Přidejte jedničku do proměnné VAR. Všimněte si absence znaku '$'.
(( ++VAR )) # Další způsob, jak přidat jeden do VAR. Preinkrement ve stylu C.
(( VAR++ )) # Další způsob, jak přidat jeden do VAR. Postincrement ve stylu C.
echo $ [ VAR * 22 ] # Vynásobí proměnnou VAR číslem 22 a nahradí příkaz výsledkem.
echo $(( VAR * 22 )) # Jiný způsob, jak udělat totéž.
Příkaz ((...)) lze také použít v podmíněných příkazech, protože jeho návratový kód je 0 nebo 1 v závislosti na tom, zda je podmínka pravdivá nebo nepravdivá:
if (( VAR == Y * 3 + X * 2 ))
then
echo If
fi
(( Z > 23 )) && echo If
Příkaz ((...)) podporuje následující relační operátory : ' == ', ' != ', ' > ', ' < ', ' >= ' a ' <= '.
Proces Bash nemůže provádět výpočty s pohyblivou řádovou čárkou . Jediné unixové shelly, které to dokážou, jsou Korn Shell (verze 1993) a zsh (verze 4.0 nebo novější).
Přesměrování vstupu/výstupu
Bashova syntaxe umožňuje různé formy přesměrování vstupu/výstupu , které tradiční Bourneův interpret postrádá. Bash může přesměrovat standardní výstup a standardní chybové proudy současně pomocí syntaxe:
příkaz > & soubor
což je jednodušší než psát ekvivalentní Bourneův příkaz, " příkaz > soubor 2>&1 ". Od verze 2.05b může Bash přesměrovat standardní vstup z řetězce pomocí následující syntaxe (označované jako „ zde řetězce “):
příkaz <<< "řetězec ke čtení jako standardní vstup"
Pokud řetězec obsahuje mezery, musí být použity uvozovky.
Příklad : Přesměrujte standardní výstup do souboru, zapište data, zavřete soubor a resetujte stdout
# vytvořit deskriptor souboru 6 kopii stdout (deskriptor souboru 1)
exec 6 > & 1
# otevřít soubor "test.data" pro zápis
exec 1 >test.data
# výstup nějakého obsahu
echo "data:data: data"
# načíst originál stdout vytvořením kopie deskriptoru souboru 6
exec 1 > & 6
# zavřít deskriptor souboru 6
exec 6 > & -
Otevřít a zavřít soubory
# otevřít soubor test.data pro čtení
exec 6 <test.data
# čtení do konce souboru
při čtení -u 6 dta
do
echo " $dta "
hotovo
# zavřít soubor test.data
exec 6 < & -
Zachyťte výstup externích příkazů
# spustí 'find' a uloží výsledky do VAR
# vyhledá názvy souborů, které končí písmenem "h"
VAR = $( find . -name "*h" )
Regulární výrazy
Procesy Bash 3.0 podporují párování regulárních výrazů pomocí následující syntaxe, která připomíná Perl :
[[ string = ~ regulární výraz ]]
Syntaxe regulárního výrazu je stejná jako v manuálové stránce regulárního výrazu (3). Stav ukončení výše uvedeného příkazu je 0, pokud řetězec odpovídá regulárnímu výrazu, a 1, pokud se neshodují. K částem uzavřeným v závorkách lze přistupovat v regulárních výrazech pomocí proměnné shellu BASH_REMATCH takto:
if [[ foobarbletch = ~ 'foo(bar)bl(.*)' ]]
then
echo Regulární výraz se shoduje!
echo $BASH_REMATCH -- výstupy: foobarbletch
echo ${ BASH_REMATCH [1] } -- výstupy: bar
echo ${ BASH_REMATCH [2] } -- výstupy: etch
fi
Tato syntaxe poskytuje vyšší výkon než spuštění samostatného procesu pro provedení příkazu grep , protože porovnávání regulárních výrazů probíhá v samotném procesu Bash. Pokud regulární výraz nebo řetězec obsahuje prázdné místo nebo metaznak tlumočníka (například ' * ' nebo ' ? '), musí být uzavřen v uvozovkách.
Escapování zpětného lomítka
Se slovy ve tvaru $'string' se zachází zvláštním způsobem. Tato slova jsou rozšířena na řetězec , přičemž znaky uniklé zpětným lomítkem jsou nahrazeny podle specifikace programovacího jazyka C . Escape sekvence zpětného lomítka se dekódují následovně:
| Zpětné lomítko Escape |
Rozšiřuje se na... |
|---|---|
| \b | Znak backspace |
| \a | úniková postava |
| \F | Znak odřádkování ( zdroj formuláře ) |
| \n | Nový znak řádku |
| \r | Znak pro návrat vozíku |
| \t | Vodorovná záložka |
| \proti | Vertikální záložka |
| \\ | Znak zpětného lomítka |
| \' | Jediný znak citátu |
| \nnn | 8bitový znak, jehož hodnota je osmičkové číslo nnn (jedna až tři číslice) |
| \xHH | 8bitový znak, jehož hodnotou je hexadecimální číslo HH (jedna nebo dvě hexadecimální číslice) |
| \cx | Znak control-X |
Rozšířený výsledek je uzavřen v jednoduchých uvozovkách, jako by tam znak $ nebyl.
Řetězec v uvozovkách s dvojitými uvozovkami, kterému předchází znak $ ( $"..." ), bude přeložen podle aktuálního národního prostředí. Pokud by to bylo C nebo POSIX, symbol $ je ignorován. Pokud je řetězec přeložen a nahrazen, bude nahrazení uzavřeno v uvozovkách.
Bash init skripty
Když se Bash spustí, provede příkazy nalezené v různých skriptech.
Když je Bash vyvolán jako interaktivní shell pro přihlášení ( login shell ), nebo jako neinteraktivní shell s volbou --login , nejprve načte a provede příkazy ze souboru /etc/profile , pokud existuje. Poté hledá ~/.bash_profile , ~/.bash_login a ~/.profile v tomto pořadí a čte a provádí příkazy od prvního, který existuje a je čitelný. Volba --noprofile může být použita při spouštění nového shellu k potlačení tohoto chování.
Když relace shellu skončí, Bash přečte a provede příkazy v ~/.bash_logout , pokud existují.
Když se spustí interaktivní interpret, který není přihlašovacím shellem , Bash čte a provádí příkazy z ~/.bashrc , pokud takový existuje. Tomu se lze vyhnout použitím volby --norc . Volba souboru --rcfile donutí Bash číst a spouštět příkazy ze souboru místo ~/.bashrc .
Když se Bash spustí neinteraktivně, například za účelem spuštění jiného skriptu prostředí, hledá proměnnou prostředí BASH_ENV , rozšíří její hodnotu, pokud existuje, a použije ji jako název souboru ke čtení a spuštění. Bash se chová, jako by byl proveden následující příkaz:
if [ -n " $BASH_ENV " ] ; pak . " $BASH_ENV " ; fi
ale hodnota proměnné PATH se nepoužívá k nalezení souboru.
Je-li Bash zavolán jménem sh , pokusí se replikovat chování starších verzí sh , při zachování shody se standardem POSIX . Když je vyvolán jako interaktivní přihlášení nebo neinteraktivní shell s volbou --login , nejprve se pokusí číst a provádět příkazy z /etc/profile a ~/.profile v tomto pořadí. Chcete- li se tomuto chování vyhnout, lze použít volbu --noprofile .
Když je Bash vyvolán jako interaktivní přihlášení s názvem sh , hledá proměnnou ENV , rozšíří její hodnotu, pokud je definována, a použije expandovanou hodnotu jako název souboru ke čtení a spuštění. Jako interpret s názvem sh se nepokouší číst a provádět příkazy z jiných spouštěcích souborů a volba --rcfile nemá žádný účinek. Neinteraktivní shell volaný jménem sh se nepokouší číst žádné další spouštěcí soubory. Při volání jako sh přejde Bash po načtení spouštěcích souborů do režimu posix .
Když je Bash spuštěn v režimu POSIX, například s volbou --posix , řídí se standardem POSIX pro spouštěcí soubory. V tomto režimu interaktivní shelly rozbalí proměnnou ENV a příkazy se čtou a spouštějí ze souboru, jehož název je hodnotou rozbalené proměnné. Nečtou se žádné další spouštěcí soubory.
Bash se pokouší určit, kdy je spuštěn vzdáleným démonem shellu, obvykle rshd . Pokud Bash zjistí, že jej spouští rshd , čte a provádí příkazy z ~/.bashrc , pokud tento soubor existuje a je čitelný. Neudělá to, pokud se nazývá sh . Chcete- li se tomuto chování vyhnout, lze použít volbu --norc a volbu --rcfile lze použít k vynucení čtení jiného souboru, ale rshd normálně nevyvolá shell s těmito volbami ani neumožní jejich specifikaci.
Bašismus
Bashism je použití funkcí Bash, které nejsou pokryty specifikacemi POSIX pro shelly . Obecně se doporučuje se jim vyhnout, umožnit přenositelnost skriptů na jiné operační systémy. [ 31 ] [ 32 ]
Viz také
Reference
- ↑ Richard Stallman (předán s komentáři Cheta Rameyho) (10. února 1988). " GNU + BSD =? ". (Skupina Google) . Adresa URL zpřístupněna 22. března 2011.
- ^ Hamilton, Naomi (30. května 2008), „AZ programovacích jazyků: BASH/Bourne-Again Shell“ , Computerworld : 2, archivováno z originálu 6. července 2011 , staženo 21. března 2011 , „Když Richard Stallman rozhodl vytvořit plnou náhradu za tehdy zatížené unixové systémy, věděl, že nakonec bude muset mít náhrady za všechny běžné nástroje, zejména standardní shell, a tyto náhrady budou muset mít přijatelné licencování. » _
- ^ a b "Skupiny Google" . groups.google.com . Staženo 28. prosince 2019 .
- ↑ "macOS Catalina použije jako výchozí prostředí zsh místo bash." . Genbeta . 4. června 2019 . Staženo 13. července 2020 .
- ↑ «Chcete provozovat Linux na Windows 10? Použijte WSL, zde je návod.» . Windows Central (v angličtině) . 9. prosince 2019 . Staženo 28. prosince 2019 .
- ↑ „Změny funkcí uživatelského prostředí – přechod z Oracle Solaris 10 na Oracle Solaris 11“ . docs.oracle.com . Staženo 28. prosince 2019 .
- ↑ „Skoro dostanu editor a kompilátor Linuxu“ . Doktora Dobba . Staženo 28. prosince 2019 .
- ↑ « " Bourne Again Shell" je hra se jménem Bourne Shell, což byl obvyklý shell na Unixu. " » .
- ^ "Wayback Machine" . web.archive.org . 9. března 2011. Archivováno z originálu 9. března 2011 . Staženo 28. prosince 2019 .
- ^ "oss-sec: Re: Časová osa Shellshock (bylo: CVE-2014-6271: vzdálené spuštění kódu prostřednictvím bash)" . seclists.org . Staženo 28. prosince 2019 .
- ↑ ve 20:27, John Leyden 24. září 2014. „Patch Bash NOW: 'Shellshock' bug blasts OS X, Linux systems wide open“ . www.theregister.co.uk (v angličtině) . Staženo 28. prosince 2019 .
- ↑ Perlroth, Nicole (25. září 2014). „Bezpečnostní experti očekávají, že softwarová chyba „Shellshock“ v Bash bude významná“ . The New York Times (v americké angličtině) . ISSN 0362-4331 . Staženo 28. prosince 2019 .
- ↑ „Hackeři naskakují do rozjetého vlaku Shellshock Bash | ZDNet» . web.archive.org . 14. května 2016. Archivováno z originálu 14. května 2016 . Staženo 28. prosince 2019 .
- ^ "shell.c" .
- ^ a b "Skupiny Google" . groups.google.com . Staženo 28. prosince 2019 .
- ^ " " O projektu GNU " " .
- ^ "Skupiny Google" . groups.google.com . Staženo 28. prosince 2019 .
- ↑ „Co je GNU: Bash – GNU Shell | LinuxJournal » . www.linuxjournal.com . Staženo 28. prosince 2019 .
- ^ "2010-10-31 Chet Ramey Early Bash Dates | Intelektuální díla | výpočetní » . Scribd . Staženo 28. prosince 2019 .
- ^ "Skupiny Google" . groups.google.com . Staženo 28. prosince 2019 .
- ^ "Skupiny Google" . groups.google.com . Staženo 28. prosince 2019 .
- ^ "Skupiny Google" . groups.google.com . Staženo 28. prosince 2019 .
- ^ Bresnahan, Christine; Blum, Richard (28. dubna 2015). CompTIA Linux+ Powered by Linux Professional Institute Studijní příručka: Zkouška LX0-103 a zkouška LX0-104 . John Wiley & Sons. ISBN 978-1-119-02122-3 . Staženo 28. prosince 2019 .
- ↑ Dán, Arman; Jang, Michael (14. července 2006). Zvládnutí Linuxu (v angličtině) . John Wiley & Sons. ISBN 978-0-7821-5277-7 . Staženo 28. prosince 2019 .
- ^ Foster-Johnson, Eric; Welch, John C.; Anderson, Micah (1. dubna 2005). Začátek skriptování Shell . John Wiley & Sons. ISBN 978-0-7645-9791-6 . Staženo 28. prosince 2019 .
- ↑ "Bash (Unix shell)" nesprávný s vlastní odkazem ( help ) . Wikipedie (v angličtině) . 27. prosince 2019 . Staženo 28. prosince 2019 .
|url= - ↑ Warren, Tom (4. června 2019). „Apple nahradí bash zsh jako výchozí prostředí v macOS Catalina“ . The Verge (v angličtině) . Staženo 28. prosince 2019 .
- ↑ "Linuxový stav ukončení bash a jak nastavit ukončovací stav v bash - Techolac" . Techolac - Computer Technology News (v americké angličtině) . 10. června 2019 . Staženo 28. prosince 2019 .
- ^ "CVE - CVE-2014-6277" . cve.mitre.org . Staženo 28. prosince 2019 .
- ↑ "Útok speciálně vytvořeného kódu proměnných prostředí Bash" . Zákaznický portál Red Hat . Staženo 28. prosince 2019 .
- ^ "bašismus" . tvůj slovník . _ Staženo 21. května 2020 .
- ^ "bašismus" . wordnik (v angličtině) . Staženo 21. května 2020 .
Externí odkazy
Wikimedia Commons má kategorii médií pro Bash .
Wikibooks obsahuje knihu nebo příručku o Bash .- oficiální webové stránky
- Seznam objednávek
- domovská stránka bash
- bash(1) : GNU Bourne-Again SHell – Obecné příkazy v manuálu Ubuntu
- Bash-FAQ
- Oznámení Bash 3.0
- Referenční příručka GNU Bash , ( HTML verze ) od Cheta Rameyho a Briana Foxe , ISBN 0-9541617-7-7
Příručky Bash z projektu Linux Documentation Project :
- Bash programování
- Bash průvodce pro začátečníky
- Programování BASH - Úvod JAK NA TO
- Advanced Bash-Scripting Guide
Další návody a tutoriály:
- O Shells
- Výuka Bash pro začátečníky
- Postup ve výukovém programu Bash Shell
- Linux Know-How včetně Bash Guide pro začátečníky
- Úvod a různé příklady /basic/medium/advanced ve skriptu Bash