15 spesialkarakterer du trenger å vite for Bash

Hvis du vil mestre Bash-skallet på Linux, macOS eller et annet UNIX-lignende system, er spesialtegn (som ~, *, | og >) avgjørende. Vi hjelper deg med å løse disse kryptiske Linux-kommandosekvensene og bli en hieroglyfhelt.

Hva er spesialkarakterer?

Det er et sett med tegn Bash-skall behandler på to forskjellige måter. Når du skriver dem på skallet, fungerer de som instruksjoner eller kommandoer og forteller skallet å utføre en bestemt funksjon. Tenk på dem som kommandoer med ett tegn.

Noen ganger vil du bare skrive ut en karakter og trenger den ikke for å fungere som et magisk symbol. Det er en måte du kan bruke et tegn til å representere seg selv i stedet for dens spesielle funksjon.

Vi viser deg hvilke karakterer som er «spesielle» eller «meta-«-tegn, samt hvordan du kan bruke dem funksjonelt og bokstavelig.

~ Hjemmekatalog

Tilden (~) er en forkortelse for hjemmekatalogen din. Det betyr at du ikke trenger å skrive inn hele banen til hjemmekatalogen din i kommandoer. Uansett hvor du er i filsystemet, kan du bruke denne kommandoen til å gå til hjemmekatalogen din:

cd ~

De

Du kan også bruke denne kommandoen med relative baner. For eksempel, hvis du er et sted i filsystemet som ikke er under hjemmemappen din og ønsker å bytte til arkivkatalogen i arbeidskatalogen din, bruk tilde for å gjøre det:

cd ~/work/archive

De

. Gjeldende katalog

Et punktum (.) representerer gjeldende katalog. Du ser det i katalogoppføringer hvis du bruker alternativet -a (alle) med ls.

ls -a

De

Du kan også bruke punktum i kommandoer for å representere banen til gjeldende katalog. For eksempel, hvis du vil kjøre et skript fra gjeldende katalog, vil du kalle det slik:

./script.sh

Dette forteller Bash å lete i gjeldende katalog for script.sh-filen. På denne måten vil den ikke søke i katalogene i banen din etter samsvarende kjørbar fil eller skript.

De

.. Overordnet katalog

Den doble punktum eller «dobbel prikk» (..) representerer den overordnede katalogen til din nåværende. Du kan bruke dette til å gå opp ett nivå i katalogtreet.

cd ..

De

Du kan også bruke denne kommandoen med relative stier – for eksempel hvis du vil gå opp ett nivå i katalogtreet og deretter skrive inn en annen katalog på det nivået.

Du kan også bruke denne teknikken til å flytte raskt til en katalog på samme nivå i katalogtreet som din nåværende. Du hopper opp ett nivå, og deretter tilbake ned ett til en annen katalog.

cd ../gc_help

De

/ Path Directory Separator

Du kan bruke en skråstrek (/) – ofte bare kalt en skråstrek – for å skille katalogene i et banenavn.

ls ~/work/archive

De

En skråstrek representerer den korteste mulige katalogbanen. Fordi alt i Linux-katalogtreet starter i rotkatalogen, kan du bruke denne kommandoen til å flytte raskt til rotkatalogen:

cd /

De

# Kommentar eller trim strenger

Oftest bruker du hashen eller talltegnet (#) for å fortelle skallet at det som følger er en kommentar, og det skal ikke handle på det. Du kan bruke den i shell-skript og – mindre nyttig – på kommandolinjen.

# This will be ignored by the Bash shell

De

Det er imidlertid ikke virkelig ignorert, fordi det er lagt til kommandohistorikken din.

  Pause og gjenoppta store opplastinger når du overfører filer online

Du kan også bruke hashen til å trimme en strengvariabel og fjerne litt tekst fra begynnelsen. Denne kommandoen oppretter en strengvariabel kalt this_string.

I dette eksemplet tildeler vi teksten «Dave Geek!» til variabelen.

this_string="Dave Geek!"

Denne kommandoen bruker ekko til å skrive ut ordene «How-To» til terminalvinduet. Den henter verdien som er lagret i strengvariabelen via en parameterutvidelse. Fordi vi legger til hashen og teksten «Dave», trimmer den av den delen av strengen før den sendes til ekko.

echo How-To ${this_string#Dave}

An

Dette endrer ikke verdien som er lagret i strengvariabelen; det påvirker bare det som sendes til ekko. Vi kan bruke ekko til å skrive ut verdien til strengvariabelen en gang til og sjekke dette:

echo $this_string

De

? Enkelttegn jokertegn

Bash-shell støtter tre jokertegn, hvorav ett er spørsmålstegnet (?). Du bruker jokertegn for å erstatte tegn i filnavnsmaler. Et filnavn som inneholder et jokertegn danner en mal som samsvarer med en rekke filnavn, i stedet for bare ett.

Jokertegnet for spørsmålstegnet representerer nøyaktig ett tegn. Tenk på følgende filnavnmal:

ls badge?.txt

Dette oversettes som «liste en hvilken som helst fil med et navn som starter med «merke» og etterfølges av et enkelt tegn før filtypen.»

Det samsvarer med følgende filer. Merk at noen har tall og noen har bokstaver etter «merket»-delen av filnavnet. Spørsmålstegnet vil samsvare med både bokstaver og tall.

De

Den filnavnsmalen samsvarer imidlertid ikke med «badge.txt», fordi filnavnet ikke har et eneste tegn mellom «badge» og filtypen. Jokertegnet for spørsmålstegnet må samsvare med et tilsvarende tegn i filnavnet.

Du kan også bruke spørsmålstegnet for å finne alle filer med et spesifikt antall tegn i filnavnene. Dette viser alle tekstfiler som inneholder nøyaktig fem tegn i filnavnet:

ls ?????.txt

EN

* Jokertegn for tegnsekvens

Du kan bruke stjernen

ls badge*

jokertegn for å stå for en hvilken som helst sekvens av tegn, inkludert ingen tegn. Tenk på følgende filnavnmal:

Dette samsvarer med alt av følgende:

An

Det samsvarer med «badge.txt» fordi jokertegnet representerer en hvilken som helst sekvens av tegn eller ingen tegn.

ls source.*

Denne kommandoen samsvarer med alle filer kalt

[] An

Karaktersett jokertegn

Som beskrevet ovenfor bruker du spørsmålstegnet for å representere et enkelt tegn og stjernen for å representere en hvilken som helst sekvens av tegn (inkludert ingen tegn). [] Du kan lage et jokertegn med hakeparentesene (

  Hva er "Screen Door Effect" i VR?

) og tegnene de inneholder. Det relevante tegnet i filnavnet må da samsvare med minst ett av tegnene i jokertegnsettet.

ls badge_0[246].txt

I dette eksemplet oversettes kommandoen til: «enhver fil med filtypen «.png», et filnavn som begynner med «pipes_0», og der neste tegn er enten 2, 4 eller 6.»

An

ls badge_[01][789].txt

Du kan bruke mer enn ett sett med parenteser per filnavnmal:

An

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

Du kan også inkludere områder i tegnsettet.  Følgende kommando velger 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 du vil på kommandolinjen, så lenge du skiller hver av dem med et semikolon (;).  Vi gjør dette i følgende eksempel: An

telle.txt; wc -l count.txt; rm count.txt” kommando i et terminalvindu» width=”646″ height=”122″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

Merk at den andre kommandoen kjører selv om den første mislykkes, den tredje kjører selv om den andre mislykkes, og så videre.

cd ./doesntexist && cp ~/Documents/reports/* .

Hvis du vil stoppe utførelsessekvensen hvis en kommando mislykkes, bruk et dobbelt og-tegnet (&&) i stedet for et semikolon:

EN

& Bakgrunnsprosess

Etter at du har skrevet inn en kommando i et terminalvindu og den er fullført, går du tilbake til ledeteksten. Normalt tar dette bare et øyeblikk eller to. Men hvis du starter et annet program, for eksempel gedit, kan du ikke bruke terminalvinduet ditt før du lukker programmet.

gedit command_address.page &

Du kan imidlertid starte et program som en bakgrunnsprosess og fortsette å bruke terminalvinduet.  For å gjøre dette, legg til et og-tegnet på kommandolinjen:

EN

Bash viser deg prosess-IDen til det som ble lansert, og returnerer deg deretter til kommandolinjen. Du kan deretter fortsette å bruke terminalvinduet.

sort 

Mange Linux-kommandoer aksepterer en fil som en parameter og tar dataene deres fra den filen.  De fleste av disse kommandoene kan også ta innspill fra en strøm.  For å lage en strøm bruker du 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"-kommandoen i et terminalvindu." width="646" height="382" >

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

Utdataomdirigering kan også omdirigere feilmeldinger hvis du bruker et siffer (2, i vårt eksempel) med >.  Slik gjør du det: EN

errors.txt"-kommandoen i et terminalvindu." width="646" height="122" >

| Rør

Et "rør" lenker kommandoer sammen. Den tar utdata fra en kommando og mater den til den neste som input. Antallet kommandoer (lengden på kjeden) er vilkårlig.

Her bruker vi cat til å mate innholdet i words.txt-filen inn i grep, som trekker ut en hvilken som helst linje som inneholder enten en liten eller stor "C". grep vil deretter sende disse linjene for å sortere. sorter bruker alternativet -r (omvendt), så de sorterte resultatene vises i omvendt rekkefølge.

cat words.txt | grep [cC] | sort -r

Vi skrev følgende:

EN

! Pipeline logisk NOT og History Operator

Utropstegnet (!) er en logisk operator som betyr IKKE.

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

Det er to kommandoer i denne kommandolinjen:
Den første kommandoen er teksten innenfor hakeparentesene;

Den andre kommandoen er teksten som følger de doble og-tegnene &&.

Den første kommandoen bruker ! som en logisk operatør. De firkantede parentesene indikerer at en test kommer til å bli utført. Alternativet -d (katalog) tester for tilstedeværelsen av en katalog kalt backup. Den andre kommandoen oppretter katalogen.

Fordi doble og-tegn skiller de to kommandoene, vil Bash bare utføre den andre hvis den første lykkes. Det er imidlertid det motsatte av det vi trenger. Hvis testen for "backup"-katalogen lykkes, trenger vi ikke å opprette den. Og hvis testen for "backup"-katalogen mislykkes, vil den andre kommandoen ikke bli utført, og den manglende katalogen vil ikke bli opprettet.

Det er her den logiske operatoren! kommer inn. Det fungerer som et logisk IKKE. Så hvis testen lykkes (dvs. katalogen eksisterer), vil ! snur det til "IKKE suksess", som er fiasko. Så den andre kommandoen er ikke aktivert.

Hvis katalogtesten mislykkes (dvs. katalogen eksisterer ikke), vil ! endrer svaret på "IKKE fiasko", som er suksess. Så kommandoen for å opprette den manglende katalogen utføres.

Den lille! pakker mye trøkk når du trenger det!

ls -l -d backup

For å sjekke statusen til backupmappen bruker du ls-kommandoen og alternativene -l (lang liste) og -d (katalog), som vist nedenfor:

EN

!24

Du kan også kjøre kommandoer fra kommandohistorikken din med utropstegnet.  History-kommandoen viser kommandohistorikken din, og du skriver inn nummeret på kommandoen du ønsker å kjøre på nytt med!  for å utføre den, som vist nedenfor:

EN

!!

Følgende kjører forrige kommando på nytt:

$ Variable uttrykk I Bash-skallet lager du variabler for å holde verdier. Noen liker Miljøvariabler,

eksisterer alltid, og du kan få tilgang til dem hver gang du åpner et terminalvindu. Disse inneholder verdier, for eksempel brukernavn, hjemmekatalog og bane.

echo $USER
echo $HOME
echo $PATH

Du kan bruke ekko for å se verdien en variabel har – bare gå foran variabelnavnet med dollartegnet ($), som vist nedenfor:

An

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

For å lage en variabel må du gi den et navn og angi en verdi for at den skal holde.  Du trenger ikke bruke dollartegnet for å lage en variabel.  Du legger bare til $ når du refererer til en variabel, for eksempel i følgende eksempel:

An

Legg til klammeparenteser ( {} ) rundt dollartegnet og utfør en parameterutvidelse for å få verdien til variabelen og tillate ytterligere transformasjoner av verdien.

MyString=123456qwerty

Dette lager en variabel som inneholder en streng med tegn, som vist nedenfor:

echo ${MyString}

Bruk følgende kommando for å ekko strengen til terminalvinduet:

echo ${myString:6}

For å returnere delstrengen fra posisjon 6 av hele strengen, bruk følgende kommando (det er en nullforskyvning, så den første posisjonen er null):

echo ${myString:0:6}

Hvis du vil ekko en delstreng som starter på posisjon null og inneholder de neste seks tegnene, bruk følgende kommando:

echo ${myString:4:4}

Bruk følgende kommando for å ekko en delstreng som starter ved posisjon fire og inneholder de neste fire tegnene:

EN

Siterer spesialtegn

Hvis du vil bruke et spesialtegn som et bokstavelig (ikke-spesielt) tegn, må du fortelle det til Bash-skallet. Dette kalles sitering, og det er tre måter å gjøre det på.

Hvis du setter teksten i anførselstegn ("..."), hindrer dette Bash i å handle på de fleste spesialtegnene, og de bare skrives ut. Et bemerkelsesverdig unntak er imidlertid dollartegnet ($). Det fungerer fortsatt som tegnet for variabeluttrykk, slik at du kan inkludere verdiene fra variabler i utdataene dine.

echo "Today is $(date)"

For eksempel skriver denne kommandoen ut dato og klokkeslett:

echo 'Today is $(date)'

Hvis du omslutter teksten i enkle anførselstegn ('...') som vist nedenfor, stopper det funksjonen til alle spesialtegnene:

echo "Today is $(date)"

Du kan bruke en omvendt skråstrek ( ) for å forhindre at følgende tegn fungerer som et spesialtegn. Dette kalles å "unnslippe" karakteren; se eksempelet nedenfor:

Bare tenk på spesialtegn som veldig korte kommandoer. Hvis du husker bruken av dem, kan det være til stor nytte for forståelsen av Bash-skallet – og andres manus – enormt.