Bourne-Again skal Eksempel på brug af Bash.
Skaberen | Brian ræv |
---|---|
Udviklet af | GNU-projekt |
Første version | 8. juni 1989 |
Sidste version | 5.1 (7. december 2020) |
Depositum | git.savannah.gnu.org/cgit/bash.git |
Skrevet i | VS |
Operativ system | GNU / Linux , BSD ( d ) , macOS og Microsoft Windows |
Miljø | X86_64 og i686 ( d ) |
Læs formater | Bash-script ( d ) |
Sprog | Engelsk og fransk |
Type |
Systemgrænseflade Kommandotolk |
Licens | GPL-3.0 + ( d ) |
Dokumentation | www.gnu.org/software/bash/manual |
Internet side | www.gnu.org/software/bash |
Bash (akronym for Bourne-Again shell ) er en script-lignende kommandolinjetolker. Det er Unix-skalen i GNU- projektet .
Baseret på Bourne-skallen giver Bash mange forbedringer til den, især fra Korn-skallen og C-skallen . Bash er gratis software frigivet under GNU General Public License . Det er den standard tolk på mange gratis Unix'er , især på GNU / Linux-systemer . Det var også standardskallen til Mac OS X , erstattet med macOS Catalina (10.15) af zsh . Det blev først portet til Microsoft Windows af Cygwin- projektet , og da Windows 10 er en mulighed i sig selv, der hedder Windows Subsystem for Linux i operativsystemet.
"Bourne igen" er et ordspil på Bourne-skallen . Bogstaveligt talt betyder Bourne igen "Bourne igen", men udtales også næsten som født igen , hvilket betyder "født igen" eller "reinkarneret". Også at bash betyder "at slå hårdt" på engelsk.
Brian Fox udgav i 1988 den første implementering af Bash på vegne af Free Software Foundation . Han blev senere videresendt af Chet Ramey. Den oprindelige Bourne-skal , som Bash blev inspireret af, blev skrevet af Stephen Bourne i 1977. Version 3.0 stammer fraJuli 2004og version 4.0 af Februar 2009.
Det 24. september 2014, en større sikkerhedsfejl offentliggøres, så Bash kan hackes via CGI- scripts . Dens brugere opfordres derefter til at lappe det for at beskytte sig mod det.
Som alle scriptede kommandolinjetolkere udfører Bash fire grundlæggende operationer:
Scripts er korte programmer, der generelt er lette at bygge. Bash leverer en flowstyringstjeneste , det vil sige, at resultatet af et script (output) overføres til et andet script (input). På denne måde kan scripts "lænkes", hver udfører en enkelt veldefineret opgave.
Scripts kan udføres manuelt af brugeren eller automatisk af systemet. For eksempel i GNU / Linux Ubuntu-distributionenresume.d indeholder biblioteket et antal scripts, der udføres automatisk, når systemet genstartes, det vil sige efter at systemet er afsluttet i dvaletilstand. Disse scripts bruges til at genstarte de forskellige programmer, der er afbrudt af standby.
Bash er en skal, der kan bruges enten i interaktiv tilstand eller i batch-tilstand:
En "session" er det sæt handlinger, der udføres af brugeren af et computersystem, mellem det øjeblik han opretter forbindelse til det og det øjeblik, han afbryder forbindelsen fra det.
Bash bruges oftest som standard til logins i GNU / Linux-distributioner. Det blev også fundet som standardskallen under MacOS X, indtil Catilina- versionen i 2019.
Sessionen lukkes med kommandoen exiteller Ctrl+D(slutningen af filmarkeringen på Unix: brugeren lukker tolkens læsestrøm).
Bash bruger biblioteket, readline der gør det muligt, ligesom C-skallen , automatisk at fuldføre (autofuldførelse) navnene på kommandoer og filer, når du skriver Tab-tasten og fremskynder arbejdet betydeligt. Op- og ned-tasterne giver dig mulighed for nemt at navigere gennem kommandohistorikken.
Redigering af kommandolinjen i vi- eller Emacs-tilstandDet er også muligt at vælge redigering af kommandolinjer en adfærd svarende til vi-teksteditoren eller den for Emacs . Du skal derefter bruge kommandoerne, set -oog set +osom ændrer shellindstillingerne. Deres opførsel er kontraintuitiv, fordi den set -oaktiverer en mulighed, mens den set +odeaktiveres.
set -o emacsstarter kommandolinjeredigering i emacs-tilstand og set -o vivi-tilstand. Siden version 2.0, har en ny intern kommando blevet tilføjet til konfiguration af adfærd af skallen: shopt. Det er beregnet til at erstatte konfigurationen af optioner med set. Driften af shopt -osvarer til set -oog for shopt +oat set +osikre kontinuitet med set.
For at fortolke en linje segmenterer Bash den i ord. Det første ord på en linje betragtes som et kommandonavn. Derefter placerer vi “argumenterne”, som også kaldes kommandoparameterne, dvs. de data, den vil behandle, f.eks. En fil. Endelig kan vi tilføje “optioner”, som vil ændre kommandoens standardadfærd. Disse indstillinger introduceres med "-", det korte bindestreg, derefter med navnet på indstillingen eller et enkelt bogstav som en genvej. Vi placerer ikke et mellemrum mellem bindestreg og navnet på indstillingen.
Hver fortolkning af en linje respekterer følgende begrænsninger:
Der er flere typer kommandonavne forbundet med forskellige prioritetsgrader. Efter den faldende rækkefølge af prioriteter, når vi fortolker dette første ord, finder vi:
Hvis Bash ikke finder noget match i aliaser, interne kommandoer eller eksterne kommandoer med det første ord på linjen, returnerer den en fejlmeddelelse med command not foundordet skrevet øverst på linjen forud for det .
I tilfælde af en ekstern kommando skal skallen finde det program, der svarer til denne kommando, før den kan udføres. En udtømmende søgning efter hver kommando gennem hele filsystemet ville tage for meget tid og gøre systemet ubrugeligt i praksis. Kun et lille sæt kataloger høres faktisk, når man søger efter programmet, der gør det muligt at udføre kommandoen. Disse mapper er defineret i en miljøvariabel kaldet " $ PATH ". Hvis kommandoen ikke findes i et af de mapper, der er anført i denne variabel, "PATH", resulterer udførelsen i en fejlmeddelelse af typen command not found.
I modsætning til hvad der sker i Windows, inkluderer Unix-skaller, inklusive Bash, af sikkerhedsmæssige årsager ikke implicit den aktuelle mappe i PATH, men den kan placeres der eksplicit. Dette er for at forhindre en person i at installere ondsindet program i den aktuelle mappe, der med samme navn som en ekstern kommando kunne køre på sit sted, hvis en bruger skrev denne kommando.
En metakarakter er en karakter, der har en anden betydning end dens bogstavelige betydning. "*" Repræsenterer ikke for Bash stjernekarakteren, den læser den som repræsenterer en hvilken som helst rækkefølge af tegn eller fravær af tegn. Metategn er opdelt i to klasser, dem, der erstatter andre tegn, og dem, der gør det muligt at beskytte tegn. Disse, brugt alene som i tilfældet med tilbageslag eller parvis, tvinger Bash til at læse tegn bogstaveligt, det vil sige at hvis det er beskyttet, mister tegnet "*" sin status som metakarakter for at blive en "stjerne " igen.
Der er to surrogatmetategn:
Der er tre måder at beskytte et tegn eller en tegnstreng på:
I slutningen af en linje angiver et tilbageslag , at kommandoen fortsætter på den næste linje. Denne funktion er især nyttig til store ordrer for at gøre dem lettere at læse.
Backslash for at danne et af specialtegnene i CStrengene med et format svarende til $'\n', hvor vi bemærker tilstedeværelsen af tilbageslag, fortolkes på en bestemt måde af Bash. Bemærk, at tilbageslag er efterfulgt af et bogstav, og at gruppen er omgivet af apostrofer. I dette tilfælde er det ikke et spørgsmål om at undslippe betydningen af en metakarakter. Dette er en måde at indikere over for Bash, at kombinationen af tilbageslag og bogstavet repræsenterer en speciel karakter af C- sproget, der skal fortolkes i henhold til reglerne i ANSI . Således vil det 'echo $'\a'medføre et " bip ".
Følgende tabel viser disse specialtegn:
Udstødnings tilbageslag |
Bash transformation |
---|---|
\på | Bip |
\ b | Mellemrum bagpå |
\ e | Udstødning |
\ f | Sideskift (det engelske navn for dette tegn er form feed ) |
\ikke | Linjeskift |
\ r | Vognretur |
\ t | Vandret faneblad |
\ v | Lodret fanebladkarakter |
\\ | Backslash |
\ ' | En apostrof (det engelske navn på denne karakter er citat ) |
\ nnn | 8-bit tegn, hvis oktale værdi er nnn |
\ xHH | 8-bit tegn, hvis hexadecimale værdi er HH |
\ cx | Control-X karakteren |
Se ASCII
Backslash før en af Bashs metategnMetategn, herunder "*" (stjerne), fortolkes ikke af Bash som bogstaver, hvilket i nogle tilfælde er ubelejligt. Find , sed- kommandoer eksemplificerer dette sarte punkt. Hvis vi ved hjælp af kommandoen findønskede at søge i den aktuelle mappe repræsenteret af “. ", Og dets underkataloger, alle de filer, hvis navn begynder med" min ", ville man være fristet til at skrive følgende kommandolinje find . -name my*Men kommandoen vender tilbage Find: Les chemins doivent précéder l'expression.
Faktisk vil Bash erstatte "min *" -strengen med listen over filer, der findes i den aktuelle mappe, der findbetragtes som en liste over stier, der skal angives først og ikke som navnet på de filer, der skal søges efter.
En løsning er at bruge et tilbageslag før "*" -tegnet for at undslippe det og tvinge Bash til at fortolke det som en bogstavelig. Hvilket giver find . -name my\*.
En anden løsning ville være at bruge tilbud. Vi kunne for eksempel skrivefind . -name "my*"
Ordre:% s | Operationer | Forklaringer |
---|---|---|
A & | Opret en ny proces ved at udstede en kommando ( trøste afhængig ), så andre kommandoer, der skal indtastes i samme konsol. | |
( A & ) | Samme som ovenstående kommando, men denne gang er den oprettede proces uafhængig af konsollen. | |
A && B | Logisk AND ( && ) | Udfør B, hvis A lykkes .
B hvis A OK |
A || B | Udfør kun B, hvis A fejler .
B hvis A KO |
|
A `B` | dynamiske parametre | A bruger resultaterne af at køre B |
A $(B) |
Hver ordre er forbundet med tre strømme:
Eventuelt kan yderligere filbeskrivere tilknyttes en kommando.
Metode til anvendelse:
Ordre:% s | Operationer | Forklaringer |
---|---|---|
A > fichier | afslut ( > ) | Udfør A-kommandoen og omdiriger dens standardoutput ( stdout ) til fil ved at overskrive dens indhold eller ved at oprette fil, hvis den ikke findes |
A >> fichier | exit ( >> ) | Udfør kommando A, og omdiriger dens standardoutput til slutningen af filen |
A 2> fichier | exit ( 2> ) | Udfør A-kommandoen og omdiriger dens standardfejloutput ( stderr ) til fil ved at overskrive dens indhold eller ved at oprette fil, hvis den ikke findes |
A 2>> fichier | exit ( 2 >> ) | Udfør kommando A, og omdiriger dens standardfejloutput til slutningen af filen |
A 2>&1 | output ( 2> & 1 ) | Udfør kommando A og omdiriger dens standardfejloutput til dens standardoutput |
A < fichier | indgang ( < ) | Udfør A-kommandoen, der sender filindholdet i sin standardindgang ( stdin ) |
A | B | exit, entry ( | ) | Udfør A og send indholdet af dets standardudgang til standardindgang på B |
Brug
Variabler henvises til ved at gå forud for dem med tegnet $ (eksempel echo $ HOME ).
Nogle miljøvariabler : USER , PID , HOME , PATH og SHELL .
På en kommandolinje erstatter vi en kommando som argument med dens resultat (i stdout ) ved at omslutte den med omvendte citater `kommandonavn` eller ved at bruge $ () ( $ (kommandonavn) ).
Regulære udtryk eller regulære udtryk bruges til at beskrive karakterstrenge. To kategorier kan skelnes blandt disse. De konstanter , som er normale tegn ligestillede, og jokertegn , der er symboler, der har betydning for en søgning. Vi har allerede diskuteret karaktererne *og derover ?. Det er muligt at forfine beskrivelsen af det mønster, du leder efter, og at specificere dets placering.
Så ^repræsenterer starten på en linje og $slutningen. For eksempel ^terrepræsenterer alle linjer, der starter med, terog ter$alle dem, der slutter med ter.
Metategn repræsenterer også karakterklasser. For eksempel sci[ea]ncerepræsenterer indholdet af parenteser en logisk ELLER. Er repræsenteret scienceog sciance. Ved hjælp af parenteser er det også muligt at definere intervaller, det er nødvendigt at tilføje en bindestreg. Det følger, at det [0-9]svarer til alle cifre 0 til 9, [a-z]alle små bogstaver og [A-Z]alle store bogstaver. Inden for parenteserne kan flere karakterklasser kombineres: epsilon[0-9A-Z]angiver f.eks., Der epsilonkan efterfølges af et tal mellem 0 og 9 eller med et stort bogstav.
Den ^ indvendige de firkantede parenteser betyder negation. Så [^eo]( ^er det andet tegn) definerer hverken "e" eller "o".
Udtryk i firkantede parenteser kan ikke bruges til at beskrive en række tegn, de svarer kun til et enkelt tegn. For at beskrive en streng skal du bruge parenteser, som er en regelmæssig underudtryk. Det rør | angiver derefter alternativerne. lou(p|ch)erbeskrevet såvel loupersom loucher.
Vi-tilstanden aktiveres af kommandoen set -o viog deaktiveres af set +o vi. Ved starten af en linje er du i indsætstilstand . For at skifte til kommandotilstand skal du trykke på escape- tasten .
Her er et resumé af kommandoerne, for en komplet beskrivelse, gå til side vi .
Forskydning:
Handling:
Mønster udskiftning:
Ved at trykke på "n" -tasten gentages søgningen / erstatningen ved den næste forekomst, "N" giver dig mulighed for at gentage / erstatte den forrige forekomst.
Gentag kommandoer:
Redigering af den aktuelle linje: