Bash

Bash er et edb-program, hvis funktion er at fortolke kommandoer.

Den er baseret på Unix shell og understøtter POSIX.

Den blev skrevet for GNU-projektet og er standard shell på de fleste GNU Linux. Dens navn er en forkortelse for Bourne-Again Shell gør et ordspil på Bourne shell, som var en af ​​de første store kunstnere af Unix.

Ved 1978 Bourne tolk blev fordelt med Version 7 Unix-versionen af ​​Stephen Bourne, så en forsker ved Bell Labs operativsystem, skrev den oprindelige version af Bourne. Brian Fox skrev Bash i 1987. I 1990, Chet Ramey blev sit forspring udvikler. Bash er standard i de fleste GNU / Linux-systemer tolk, foruden Mac OS X Tiger, og kan køre på de fleste Unix-lignende operativsystemer. Det er også blevet båret af Microsoft Windows Cygwin projekt.

Bash syntaks

Den Bash kommandosyntaksen er en overordnet vejledning baseret på Bourne skal syntaks. Den endelige specifikation af Bash kommando syntaks kan findes i Bash Reference Manual distribueret af GNU-projektet. Dette afsnit sætter fokus på nogle af sine unikke egenskaber.

Hovedparten af ​​Bourne shell scripts kan udføres af Bash uændret, med undtagelse af de shell scripts, eller konsol, Bourne med henvisning til Bourne særlig variabel eller bruge en Bourne indbygget. Den Bash kommandosyntaksen indeholder ideer trukket fra Korn Shell og C Shell, ligesom redigering kommandolinjen, kommandoen historie, den mappe stakken, variable $ RANDOM og $ PPID, og ​​syntaks for substitution POSIX kommando: $. Når det bruges som en interaktiv kommando shell, Bash giver autocomplete program navne, filnavne, variable navne, osv, når brugeren trykker på TAB-tasten.

Bash syntaks har mange udvidelser, at Bourne skal ikke giver. Flere af de nævnte forlængelser er angivet nedenfor.

Adgang parametre

Bash scripts modtager parametre, som passerer skallen som $ 1, $ 2, ..., $ n. Vi ved, hvordan vi har fået symbolet $ #.

For eksempel, hvis dit script skal bruge to parametre:

Vi har også $ array, som indeholder alle de beståede til scriptet parametre, og vi kan gentage over disse som følger:

Integer Math

En væsentlig begrænsning af Bourne shell er, at det ikke kan udføre heltal beregninger uden at starte en ekstern proces. I stedet kan en proces Bash udføre beregninger ved hjælp af heltal orden () og $ variabel syntaks som følger:

Ordre () kan også bruges i betingede udsagn, da dens returkode er 0 eller 1 afhængigt af, om betingelsen er sand eller falsk:

Ordre () understøtter følgende relationelle operatører "== ',' & gt '=!'; '' & Lt; '' & gt; =" og "& lt; = '.

En proces Bash kan ikke udføre floating point beregninger. Den eneste Unix shell stand til dette er Korn Shell og zsh.

Omdirigerer input / output

Bash syntaks tillader forskellige måder at omdirigere input / output af den traditionelle Bourne shell mangler. Bash kan omdirigere standard output og standardafvigelse streams på én gang ved hjælp af syntaks:

som er enklere at skrive tilsvarende Bourne orden, "orden & gt; fil 2 & gt; & amp; 1". Siden version 2.05b, kan Bash omdirigere standard input fra en streng ved hjælp af følgende syntaks:

Hvis strengen indeholder mellemrum, skal anførselstegn anvendes.

Eksempel: Omdiriger standard output til en fil, skrive data, lukke filen og genstart stdout

Åbne og lukke filer

Fang produktionen af ​​eksterne kommandoer

Regular Expressions

Bash 3.0 understøtter parringsprocessen regulære udtryk ved hjælp af følgende syntaks, der minder om Perl:

Det regulære udtryk syntaks er den samme som dokumenteret regex siders manual. Udgangen status ovenstående kommando er 0, hvis strengen matcher det regulære udtryk, og 1, hvis ikke gift. Regulære udtryk kan tilgås dele omgivet af parenteser, ved hjælp af den variable BASH_REMATCH skallen, som følger:

Denne syntaks giver ydeevne overlegen i forhold til gydning særskilt for at køre en grep proces resultater, fordi det regulære udtryk matchning finder sted inden for Bash selve processen. Hvis det regulære udtryk eller strengen indeholder mellemrum eller shell metategn det skal angives.

Flygte med backslash

Ord danner $ 'string' behandles på en særlig måde. Disse ord er udvidet til snor, med backslash undslap tegn erstattet som angivet af programmeringssproget C. omvendt skråstreg undslippe sekvenser, der afkodes som følger:

Den udvidede resultat er citeret med enkelte anførselstegn, som om de $ tegnet ikke er til stede.

En citeret streng med en dobbelt citat indledes med en $ tegn vil blive oversat henhold til den aktuelle lokalitet. Hvis det c eller POSIX, er $ symbol ignoreres. Hvis strengen er oversat og erstattes, vil erstatningen blive citeret af dobbelte anførselstegn.

Bash startscripts

Da Bash starter, det udfører de kommandoer er i forskellige scripts.

Når Bash påberåbes som en interaktiv shell til starten af ​​en session, eller som en ikke-interaktiv shell med mulighed --login først læser og udfører kommandoer fra / etc / profile, hvis nogen. Så find ~ / .bash_profile, ~ / .bash_login, og ~ / .profile, i nævnte rækkefølge, og læser og udfører kommandoer fra den første, som findes og er læsbar. Den --noprofile indstilling kan bruges til at starte en ny shell til at hæmme denne adfærd.

Når et login shell udgange, Bash læser og udfører kommandoer fra ~ / .bash_logout, hvis nogen.

Når en interaktiv shell, der ikke er en login-shell starter, Bash læser og udfører kommandoer fra ~ / .bashrc, hvis nogen. Dette kan undgås ved hjælp af --norc mulighed. Den --rcfile fil mulighed vil tvinge Bash til at læse og udføre kommandoer fra fil i stedet for ~ / .bashrc.

Når Bash starter en ikke-interaktiv tilstand, for eksempel til at udføre en anden script-konsol, ser BASH_ENV miljøvariablen, det udvider sin værdi, hvis den findes, og bruger det som navnet på den fil, til at læse og udføre. Bash opfører sig som om at udføre følgende rækkefølge:

men værdien af ​​variablen PATH ikke anvendes til at finde filen.

Hvis Bash kaldes med navnet sh, den forsøger at replikere adfærd historiske versioner af sh, mens overholdelsen af ​​POSIX-standarden opretholdes. Når det påberåbes som en interaktiv login-shell, eller en ikke-interaktiv shell med mulighed --login første forsøg på at læse og udføre kommandoer fra / etc / profile og ~ / .profile, i den rækkefølge. Den --noprofile mulighed kan bruges til at forhindre denne adfærd.

Når påberåbes som en interaktiv shell med navnet sh, Bash ser for variablen ENV, hvis defineret udvider sin værdi, og bruger den udvidede værdi som navnet på en fil for at læse og udføre værdi. Da en skal påberåbes som sh ikke forsøger at læse og udføre kommandoer fra andre startfiler, og --rcfile indstilling har ingen effekt. En ikke-interaktiv shell påberåbes med navnet sh forsøger ikke at læse andre startfiler. Når påberåbes som sh, Bash går i POSIX-tilstand efter at have læst startfilerne.

Da Bash er startet i POSIX-tilstand, for eksempel med mulighed --posix følger POSIX-standarden for startfiler. I denne tilstand, interaktive skaller udvide ENV variable og læse og udføre kommandoer fra den fil, hvis navn er den ekspanderede værdi af variablen. Ingen andre startfiler ikke læst.

Bash forsøg på at bestemme, hvornår det bliver udført af en ekstern shell-dæmon, som regel rshd. Hvis Bash afgør det køres af rshd, læser og udfører kommandoer fra ~ / .bashrc, hvis filen findes og er læsbar. Det vil ikke gøre dette, hvis påberåbes som sh. Den --norc mulighed kan bruges til at forhindre denne opførsel, og --rcfile kan bruges til at tvinge en anden fil for at læse, men rshd generelt ikke påberåbe skallen med disse muligheder, eller give dem mulighed for at blive specificeret.

Bashismo

bashismo Det kaldes brugen af ​​Bash funktioner, der ikke indgår i specifikationerne for POSIX skaller. Generelt bør du undgå, at tillade overførsel af scripts til andre operativsystemer.

Forrige artikel Borgmester Gonzalo Crespo
Næste artikel Bidrag