Hvis du vil mestre Bash-skallen på Linux, macOS eller et andet UNIX-lignende system, er specialtegn (som ~, *, | og >) kritiske. Vi hjælper dig med at optrevle disse kryptiske Linux-kommandosekvenser og blive en hieroglyffers helt.
Indholdsfortegnelse
Hvad er specielle karakterer?
Der er et sæt karakterer Bash shell behandler på to forskellige måder. Når du skriver dem ved skallen, fungerer de som instruktioner eller kommandoer og fortæller skallen at udføre en bestemt funktion. Tænk på dem som kommandoer med et enkelt tegn.
Nogle gange vil du bare udskrive et tegn og behøver det ikke for at fungere som et magisk symbol. Der er en måde, hvorpå du kan bruge et tegn til at repræsentere sig selv i stedet for dets særlige funktion.
Vi viser dig, hvilke karakterer der er “specielle” eller “meta-” karakterer, samt hvordan du kan bruge dem funktionelt og bogstaveligt.
~ Hjemmekatalog
Tilden (~) er en forkortelse for din hjemmemappe. Det betyder, at du ikke behøver at skrive den fulde sti til din hjemmemappe i kommandoer. Uanset hvor du er i filsystemet, kan du bruge denne kommando til at gå til din hjemmemappe:
cd ~
Du kan også bruge denne kommando med relative stier. For eksempel, hvis du er et sted i filsystemet, der ikke er under din hjemmemappe og ønsker at skifte til arkivmappen i din arbejdsmappe, skal du bruge tilde til at gøre det:
cd ~/work/archive
. Nuværende bibliotek
Et punktum (.) repræsenterer den aktuelle mappe. Du kan se det i mappeoversigter, hvis du bruger -a (alle) muligheden med ls.
ls -a
Du kan også bruge punktum i kommandoer til at repræsentere stien til din nuværende mappe. For eksempel, hvis du vil køre et script fra den aktuelle mappe, vil du kalde det sådan:
./script.sh
Dette fortæller Bash at søge i den aktuelle mappe efter filen script.sh. På denne måde vil den ikke søge i mapperne på din vej for at finde matchende eksekverbare filer eller script.
.. Forældrekartotek
Det dobbelte punktum eller “dobbeltpunkt” (..) repræsenterer den overordnede mappe for din nuværende. Du kan bruge dette til at flytte et niveau op i mappetræet.
cd ..
Du kan også bruge denne kommando med relative stier – for eksempel hvis du vil gå et niveau op i bibliotekstræet og derefter indtaste en anden mappe på det niveau.
Du kan også bruge denne teknik til at flytte hurtigt til en mappe på samme niveau i mappetræet som din nuværende. Du hopper et niveau op og går derefter tilbage til et andet bibliotek.
cd ../gc_help
/ Path Directory Separator
Du kan bruge en fremadgående skråstreg (/) – ofte bare kaldet en skråstreg – til at adskille mapperne i et stinavn.
ls ~/work/archive
Én skråstreg repræsenterer den kortest mulige mappesti. Fordi alt i Linux-katalogtræet starter ved rodmappen, kan du bruge denne kommando til hurtigt at flytte til rodmappen:
cd /
# Kommentar eller trim strenge
Oftest bruger du hash- eller taltegnet (#) til at fortælle skallen, at det, der følger, er en kommentar, og det skal ikke handle på det. Du kan bruge det i shell-scripts og – mindre nyttigt – på kommandolinjen.
# This will be ignored by the Bash shell
Det er dog ikke rigtig ignoreret, fordi det er føjet til din kommandohistorik.
Du kan også bruge hashen til at trimme en strengvariabel og fjerne noget tekst fra begyndelsen. Denne kommando opretter en strengvariabel kaldet this_string.
I dette eksempel tildeler vi teksten “Dave Geek!” til variablen.
this_string="Dave Geek!"
Denne kommando bruger ekko til at udskrive ordene “How-To” til terminalvinduet. Den henter værdien gemt i strengvariablen via en parameterudvidelse. Fordi vi tilføjer hashen og teksten “Dave”, trimmer den den del af strengen af, før den sendes til ekko.
echo How-To ${this_string#Dave}
Dette ændrer ikke værdien gemt i strengvariablen; det påvirker kun, hvad der sendes til ekko. Vi kan bruge ekko til at udskrive værdien af strengvariablen endnu en gang og kontrollere dette:
echo $this_string
? Enkelttegn jokertegn
Bash shell understøtter tre jokertegn, hvoraf det ene er spørgsmålstegnet (?). Du bruger jokertegn til at erstatte tegn i filnavnskabeloner. Et filnavn, der indeholder et jokertegn, danner en skabelon, der matcher en række filnavne i stedet for kun ét.
Jokertegnet med spørgsmålstegnet repræsenterer præcis ét tegn. Overvej følgende filnavnskabelon:
ls badge?.txt
Dette oversættes som “liste enhver fil med et navn, der starter med ‘badge’ og efterfølges af et enkelt tegn før filtypenavnet.”
Det matcher følgende filer. Bemærk, at nogle har tal og nogle har bogstaver efter “badge”-delen af filnavnet. Spørgsmålstegnet vil matche både bogstaver og tal.
Denne filnavnskabelon matcher dog ikke “badge.txt”, fordi filnavnet ikke har et enkelt tegn mellem “badge” og filtypenavnet. Jokertegnet med spørgsmålstegnet skal matche et tilsvarende tegn i filnavnet.
Du kan også bruge spørgsmålstegnet til at finde alle filer med et bestemt antal tegn i filnavnene. Dette viser alle tekstfiler, der indeholder præcis fem tegn i filnavnet:
ls ?????.txt
* Karaktersekvens jokertegn
Du kan bruge stjernen
ls badge*
jokertegn til at stå for enhver sekvens af tegn, inklusive ingen tegn. Overvej følgende filnavnskabelon:
An
Det matcher “badge.txt”, fordi jokertegnet repræsenterer enhver sekvens af tegn eller ingen tegn.
ls source.*
[] An
Karaktersæt jokertegn
Som beskrevet ovenfor bruger du spørgsmålstegnet til at repræsentere et enkelt tegn og stjernen til at repræsentere en hvilken som helst sekvens af tegn (inklusive ingen tegn). [] Du kan danne et jokertegn med firkantede parenteser (
) og de tegn, de indeholder. Det relevante tegn i filnavnet skal så matche mindst ét af tegnene i jokertegnsættet.
ls badge_0[246].txt
An
ls badge_[01][789].txt
An
ls badge_[23][1-5].txt
An
; Shell Command Separator
ls > count.txt; wc -l count.txt; rm count.txt
An
tælle.txt; wc -l count.txt; rm count.txt” kommando i et terminalvindue’ width=”646″ height=”122″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>
Bemærk, at den anden kommando kører, selvom den første fejler, den tredje kører, selvom den anden fejler, og så videre.
cd ./doesntexist && cp ~/Documents/reports/* .
EN
& Baggrundsproces
Når du har indtastet en kommando i et terminalvindue, og den er fuldført, vender du tilbage til kommandoprompten. Normalt tager dette kun et øjeblik eller to. Men hvis du starter et andet program, såsom gedit, kan du ikke bruge dit terminalvindue, før du lukker programmet.
gedit command_address.page &
EN
Bash viser dig proces-id’et for det, der blev lanceret, og returnerer dig derefter til kommandolinjen. Du kan derefter fortsætte med at bruge dit terminalvindue.
sortWhen a command has input redirected into it, it might behave differently than when it reads from a named file.
If we use wc to count the words, lines, and characters in a file, it prints the values, and then the filename. If we redirect the contents of the file to wc, it prints the same numeric values but doesn’t know the name of the file from which the data came. It cannot print a filename.
Here are some examples of how you can use wc:
wc words.txtwc> Output Redirection
You can use the right-angle bracket ( > ) to redirect the output from a command (typically, into a file); here’s an example:
ls > files.txtcat files.txtAn
files.txt" kommando i et terminalvindue." width="646" height="382">
wc doesntexist.txt 2> errors.txtcat errors.txtEN
errors.txt" kommando i et terminalvindue." width="646" height="122">
| Rør
Et "rør" kæder kommandoer sammen. Den tager output fra en kommando og sender den til den næste som input. Antallet af rørkommandoer (længden af kæden) er vilkårlig.
Her vil vi bruge cat til at føre indholdet af words.txt-filen ind i grep, som udtrækker enhver linje, der indeholder enten et lille eller stort "C". grep vil derefter sende disse linjer til sortering. sorter bruger muligheden -r (omvendt), så de sorterede resultater vises i omvendt rækkefølge.
cat words.txt | grep [cC] | sort -rEN
! Pipeline logisk NOT og History Operator
Udråbstegn (!) er en logisk operator, der betyder IKKE.
[ ! -d ./backup ] && mkdir ./backupDer er to kommandoer i denne kommandolinje:
Den første kommando er teksten inden for de firkantede parenteser;Den anden kommando er teksten, der følger de dobbelte og-tegn &&.
Den første kommando bruger ! som en logisk operatør. De firkantede parenteser indikerer, at der vil blive lavet en test. Indstillingen -d (katalog) tester for tilstedeværelsen af en mappe kaldet backup. Den anden kommando opretter mappen.
Fordi dobbelte og-tegn adskiller de to kommandoer, vil Bash kun udføre den anden, hvis den første lykkes. Det er dog det modsatte af, hvad vi har brug for. Hvis testen for "backup"-mappen lykkes, behøver vi ikke oprette den. Og hvis testen for "backup"-biblioteket mislykkes, vil den anden kommando ikke blive udført, og den manglende mappe vil ikke blive oprettet.
Det er her den logiske operator! kommer ind. Det fungerer som et logisk NOT. Så hvis testen lykkes (dvs. biblioteket eksisterer), vil ! vender det til "IKKE succes", hvilket er fiasko. Så den anden kommando er ikke aktiveret.
Hvis bibliotekstesten mislykkes (dvs. biblioteket eksisterer ikke), vil ! ændrer svaret på "IKKE fiasko", som er succes. Så kommandoen til at oprette den manglende mappe udføres.
Den lille! pakker en masse punch, når du har brug for det!
ls -l -d backupEN
!24EN
!!Følgende kører den forrige kommando igen:
$ Variable Udtryk I Bash-skallen opretter du variabler til at holde værdier. Nogle, som miljøvariabler,
eksisterer altid, og du kan få adgang til dem, hver gang du åbner et terminalvindue. Disse indeholder værdier, såsom dit brugernavn, hjemmemappe og sti.
echo $USERecho $HOMEecho $PATHAn
ThisDistro=UbuntuMyNumber=2001echo $ThisDistroecho $MyNumberAn
Tilføj klammer ( {} ) omkring dollartegnet og udfør en parameterudvidelse for at opnå værdien af variablen og tillade yderligere transformationer af værdien.
MyString=123456qwertyDette skaber en variabel, der indeholder en streng af tegn, som vist nedenfor:
echo ${MyString}Brug følgende kommando til at ekko strengen til terminalvinduet:
echo ${myString:6}For at returnere understrengen, der starter ved position 6 af hele strengen, skal du bruge følgende kommando (der er en nul-offset, så den første position er nul):
echo ${myString:0:6}Hvis du ønsker at ekko en understreng, der starter ved position nul og indeholder de næste seks tegn, skal du bruge følgende kommando:
echo ${myString:4:4}EN
Citerer specielle tegn
Hvis du vil bruge et specialtegn som et bogstaveligt (ikke-specielt) tegn, skal du fortælle det til Bash-skallen. Dette kaldes citering, og der er tre måder at gøre det på.
Hvis du omslutter teksten i anførselstegn ("..."), forhindrer dette Bash i at handle på de fleste af specialtegnene, og de udskriver bare. En bemærkelsesværdig undtagelse er dog dollartegnet ($). Det fungerer stadig som tegnet for variabeludtryk, så du kan inkludere værdierne fra variabler i dit output.
echo "Today is $(date)"For eksempel udskriver denne kommando dato og klokkeslæt:
echo 'Today is $(date)'Hvis du omslutter teksten i enkelte anførselstegn ('...') som vist nedenfor, stopper det funktionen af alle specialtegn:
echo "Today is $(date)"Du kan bruge en omvendt skråstreg ( ) for at forhindre følgende tegn i at fungere som et specialtegn. Dette kaldes "at undslippe" karakteren; se eksemplet nedenfor:
Tænk bare på specialtegn som meget korte kommandoer. Hvis du husker deres anvendelser udenad, kan det gavne din forståelse af Bash-skallen – og andres scripts – enormt meget.