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.
Innholdsfortegnelse
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 ~
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
. Gjeldende katalog
Et punktum (.) representerer gjeldende katalog. Du ser det i katalogoppføringer hvis du bruker alternativet -a (alle) med ls.
ls -a
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.
.. 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 ..
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
/ Path Directory Separator
Du kan bruke en skråstrek (/) – ofte bare kalt en skråstrek – for å skille katalogene i et banenavn.
ls ~/work/archive
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 /
# 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
Det er imidlertid ikke virkelig ignorert, fordi det er lagt til kommandohistorikken din.
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}
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
? 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.
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
* 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:
An
Det samsvarer med «badge.txt» fordi jokertegnet representerer en hvilken som helst sekvens av tegn eller ingen tegn.
ls source.*
[] 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 (
) og tegnene de inneholder. Det relevante tegnet i filnavnet må da samsvare med minst ett av tegnene i jokertegnsettet.
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
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/* .
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 &
EN
Bash viser deg prosess-IDen til det som ble lansert, og returnerer deg deretter til kommandolinjen. Du kan deretter fortsette å bruke terminalvinduet.
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"-kommandoen i et terminalvindu." width="646" height="382" >
wc doesntexist.txt 2> errors.txtcat errors.txtEN
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 -rEN
! Pipeline logisk NOT og History Operator
Utropstegnet (!) er en logisk operator som betyr IKKE.
[ ! -d ./backup ] && mkdir ./backupDet 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 backupEN
!24EN
!!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 $USERecho $HOMEecho $PATHAn
ThisDistro=UbuntuMyNumber=2001echo $ThisDistroecho $MyNumberAn
Legg til klammeparenteser ( {} ) rundt dollartegnet og utfør en parameterutvidelse for å få verdien til variabelen og tillate ytterligere transformasjoner av verdien.
MyString=123456qwertyDette 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}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.