15 specielle karakterer, du skal kende til Bash

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.

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 ~

Det

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

Det

. 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

Det

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.

Det

.. 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 ..

Det

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

Det

/ 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

Det

É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 /

Det

# 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

Det er dog ikke rigtig ignoreret, fordi det er føjet til din kommandohistorik.

  Sådan kortlægger du data på et verdenskort

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}

An

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

Det

? 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.

Det

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

EN

* Karaktersekvens jokertegn

Du kan bruge stjernen

ls badge*

jokertegn til at stå for enhver sekvens af tegn, inklusive ingen tegn. Overvej følgende filnavnskabelon:

Dette matcher alle følgende:

An

Det matcher “badge.txt”, fordi jokertegnet repræsenterer enhver sekvens af tegn eller ingen tegn.

ls source.*

Denne kommando matcher alle filer kaldet

[] 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 (

  Sådan skifter du baggrund på teams

) 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

I dette eksempel oversættes kommandoen til:

An

ls badge_[01][789].txt

Du kan bruge mere end ét sæt parenteser pr. filnavnskabelon:

An

ls badge_[23][1-5].txt

Du kan også inkludere områder i tegnsættet.  Den følgende kommando vælger filer med tallene 21 til 25 og 31 til 35 i filnavnet.

An

; Shell Command Separator

ls > count.txt; wc -l count.txt; rm count.txt

Du kan skrive så mange kommandoer som du vil på kommandolinjen, så længe du adskiller hver af dem med et semikolon (;).  Det gør vi i følgende eksempel: 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/* .

Hvis du vil stoppe udførelsessekvensen, hvis en kommando mislykkes, skal du bruge et dobbelt og-tegn (&&) i stedet for et semikolon:

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 &

Du kan dog starte et program som en baggrundsproces og fortsætte med at bruge terminalvinduet.  For at gøre dette skal du blot tilføje et og-tegn til kommandolinjen:

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.

sort 

Mange Linux-kommandoer accepterer en fil som en parameter og tager deres data fra den fil.  De fleste af disse kommandoer kan også tage input fra en stream.  For at oprette en stream skal du bruge den venstre vinkelparentes (

When 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.txt
wc 

EN

> 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.txt
cat files.txt

EN An

files.txt" kommando i et terminalvindue." width="646" height="382">

wc doesntexist.txt 2> errors.txt
cat errors.txt

Output-omdirigering kan også omdirigere fejlmeddelelser, hvis du bruger et ciffer (2, i vores eksempel) med >.  Sådan gør du: EN

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 -r

Vi skrev følgende:

EN

! Pipeline logisk NOT og History Operator

Udråbstegn (!) er en logisk operator, der betyder IKKE.

[ ! -d ./backup ] && mkdir ./backup

Der 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 backup

For at kontrollere status for sikkerhedskopieringsmappen, bruger du ls-kommandoen og -l (lang liste) og -d (mappe), som vist nedenfor:

EN

!24

Du kan også køre kommandoer fra din kommandohistorik med udråbstegn.  Historiekommandoen viser din kommandohistorik, og du indtaster derefter nummeret på den kommando, du ønsker at køre med igen!  for at udføre det, som vist nedenfor:

EN

!!

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 $USER
echo $HOME
echo $PATH

Du kan bruge ekko til at se den værdi, en variabel har - bare foran variabelnavnet med dollartegnet ($), som vist nedenfor:

An

ThisDistro=Ubuntu
MyNumber=2001
echo $ThisDistro
echo $MyNumber

For at oprette en variabel skal du give den et navn og angive en værdi, som den kan holde.  Du behøver ikke bruge dollartegnet for at oprette en variabel.  Du tilføjer kun $, når du refererer til en variabel, såsom i følgende eksempel:

An

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=123456qwerty

Dette 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}

Brug følgende kommando til at ekko en understreng, der starter ved position fire og indeholder de næste fire tegn:

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.