15 speciálních postav, které potřebujete znát pro Bash

Pokud chcete ovládat prostředí Bash na Linuxu, macOS nebo jiném systému podobnému UNIXu, jsou důležité speciální znaky (jako ~, *, | a >). Pomůžeme vám rozluštit tyto záhadné sekvence příkazů Linuxu a stát se hrdinou hieroglyfů.

Co jsou speciální znaky?

Existuje sada znaků Bash shell léčí dvěma různými způsoby. Když je napíšete do shellu, fungují jako instrukce nebo příkazy a říkají shellu, aby provedl určitou funkci. Představte si je jako jednoznakové příkazy.

Někdy si prostě chcete vytisknout postavu a nepotřebujete, aby fungovala jako magický symbol. Existuje způsob, jak můžete použít postavu k tomu, aby reprezentovala sama sebe spíše než její speciální funkci.

Ukážeme vám, které postavy jsou „speciální“ nebo „meta-“ postavy, a také jak je můžete funkčně a doslova použít.

~ Domovský adresář

Vlnovka (~) je zkratka pro váš domovský adresář. To znamená, že do příkazů nemusíte zadávat úplnou cestu k domovskému adresáři. Ať jste kdekoli v souborovém systému, můžete pomocí tohoto příkazu přejít do svého domovského adresáře:

cd ~

Tento příkaz můžete také použít s relativními cestami. Pokud se například nacházíte někde v systému souborů, který není ve vaší domovské složce, a chcete přejít do archivního adresáře ve vašem pracovním adresáři, použijte k tomu vlnovku:

cd ~/work/archive

The

. Aktuální adresář

Tečka (.) představuje aktuální adresář. Vidíte to ve výpisech adresářů, pokud použijete volbu -a (all) s ls.

ls -a

The

Můžete také použít tečku v příkazech k reprezentaci cesty k vašemu aktuálnímu adresáři. Pokud například chcete spustit skript z aktuálního adresáře, nazvali byste jej takto:

./script.sh

To říká Bashovi, aby se v aktuálním adresáři podíval na soubor script.sh. Tímto způsobem nebude hledat v adresářích ve vaší cestě odpovídající spustitelný soubor nebo skript.

The

.. Nadřazený adresář

Dvojitá tečka neboli „dvojitá tečka“ (..) představuje nadřazený adresář vašeho aktuálního adresáře. Můžete to použít k posunutí o jednu úroveň výše ve stromu adresářů.

cd ..

The

Tento příkaz můžete také použít s relativními cestami – například chcete-li přejít o jednu úroveň výše ve stromu adresářů a poté vstoupit do jiného adresáře na této úrovni.

Tuto techniku ​​můžete také použít k rychlému přesunu do adresáře na stejné úrovni ve stromu adresářů, jako je váš aktuální. Přeskočíte o jednu úroveň nahoru a poté se vrátíte o jednu úroveň zpět do jiného adresáře.

cd ../gc_help

The

/ Path Directory Separator

K oddělení adresářů v názvu cesty můžete použít dopředné lomítko (/) – často nazývané jen lomítko.

ls ~/work/archive

The

Jedno lomítko představuje nejkratší možnou cestu k adresáři. Protože vše ve stromu adresářů Linux začíná v kořenovém adresáři, můžete tento příkaz použít k rychlému přesunu do kořenového adresáře:

cd /

The

# Komentář nebo oříznutí řetězce

Nejčastěji používáte hash nebo znak čísla (#), abyste shellu řekli, že to, co následuje, je komentář, a neměl by na to reagovat. Můžete jej použít ve skriptech shellu a – méně užitečné – na příkazovém řádku.

# This will be ignored by the Bash shell

The

Ve skutečnosti však není ignorován, protože je přidán do vaší historie příkazů.

  před hovorem zkontrolujte hardware

Můžete také použít hash k oříznutí proměnné řetězce a odstranění některého textu ze začátku. Tento příkaz vytvoří řetězcovou proměnnou nazvanou tento_řetězec.

V tomto příkladu přiřadíme text „Dave Geek!“ do proměnné.

this_string="Dave Geek!"

Tento příkaz používá echo k tisku slov „Jak na to“ do okna terminálu. Načte hodnotu uloženou v řetězcové proměnné přes a rozšíření parametrů. Protože připojujeme hash a text „Dave“, ořízne tuto část řetězce předtím, než je předán echo.

echo How-To ${this_string#Dave}

An

Tím se nezmění hodnota uložená v řetězcové proměnné; ovlivňuje pouze to, co je odesláno do echa. Můžeme použít echo k vytištění hodnoty proměnné řetězce ještě jednou a zkontrolovat toto:

echo $this_string

The

? Zástupný znak jednoho znaku

Bash shell podporuje tři zástupné znaky, z nichž jeden je otazník (?). Zástupné znaky se používají k nahrazení znaků v šablonách názvů souborů. Název souboru, který obsahuje zástupný znak, tvoří šablonu, která odpovídá řadě názvů souborů, nikoli pouze jednomu.

Zástupný znak otazníku představuje právě jeden znak. Zvažte následující šablonu názvu souboru:

ls badge?.txt

To se překládá jako „uveďte jakýkoli soubor s názvem, který začíná ‚odznakem‘ a za kterým následuje libovolný jednotlivý znak před příponou souboru.

Odpovídá následujícím souborům. Všimněte si, že některé mají čísla a některé písmena za částí názvu souboru „odznak“. Zástupný znak otazníku bude odpovídat písmenům i číslům.

The

Šablona názvu souboru však neodpovídá „badge.txt“, protože název souboru nemá mezi „badge“ a příponou souboru jediný znak. Zástupný znak otazníku se musí shodovat s odpovídajícím znakem v názvu souboru.

Můžete také použít otazník k vyhledání všech souborů s určitým počtem znaků v názvech souborů. Zde jsou uvedeny všechny textové soubory, které obsahují přesně pět znaků v názvu souboru:

ls ?????.txt

A

* Zástupný znak sekvence znaků

Můžete použít hvězdičku

ls badge*

zástupný znak pro libovolnou sekvenci znaků, včetně žádných znaků. Zvažte následující šablonu názvu souboru:

To odpovídá všem následujícím:

An

Odpovídá „badge.txt“, protože zástupný znak představuje jakoukoli sekvenci znaků nebo žádné znaky.

ls source.*

Tento příkaz odpovídá všem souborům nazývaným „zdroj“ bez ohledu na příponu souboru.

[] An

Znaková sada zástupný znak

Jak je uvedeno výše, otazník používáte k reprezentaci jakéhokoli jednotlivého znaku a hvězdičku k reprezentaci libovolné sekvence znaků (včetně žádných znaků). [] Zástupný znak můžete vytvořit pomocí hranatých závorek (

) a znaky, které obsahují. Příslušný znak v názvu souboru se pak musí shodovat alespoň s jedním ze znaků v sadě zástupných znaků.

ls badge_0[246].txt

V tomto příkladu se příkaz překládá jako: „jakýkoli soubor s příponou „.png“, název souboru začínající na „pipes_0“ a ve kterém je dalším znakem buď 2, 4 nebo 6.“

An

ls badge_[01][789].txt

Pro každou šablonu názvu souboru můžete použít více než jednu sadu závorek:

An

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

Do znakové sady můžete také zahrnout rozsahy.  Následující příkaz vybere soubory s čísly 21 až 25 a 31 až 35 v názvu souboru.

An

; Oddělovač příkazů shellu

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

Na příkazový řádek můžete zadat libovolný počet příkazů, pokud každý z nich oddělíte středníkem (;).  Uděláme to v následujícím příkladu: An

  Kolik lidí může najednou používat Netflix?

count.txt; wc -l count.txt; rm count.txt” příkaz v okně terminálu‘ width=”646″ height=”122″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

Všimněte si, že druhý příkaz se spustí, i když selže první, třetí se spustí, i když selže druhý a tak dále.

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

Pokud chcete zastavit sekvenci provádění, pokud jeden příkaz selže, použijte místo středníku dvojitý ampersand (&&):

A

& Proces na pozadí

Po zadání příkazu v okně terminálu a jeho dokončení se vrátíte do příkazového řádku. Normálně to trvá jen chvíli nebo dvě. Ale pokud spustíte jinou aplikaci, jako je gedit, nemůžete používat okno terminálu, dokud aplikaci nezavřete.

gedit command_address.page &

Můžete však spustit aplikaci jako proces na pozadí a nadále používat okno terminálu.  Chcete-li to provést, stačí přidat ampersand do příkazového řádku:

A

Bash vám ukáže ID procesu toho, co bylo spuštěno, a poté vás vrátí na příkazový řádek. Poté můžete pokračovat v používání okna terminálu.

sort 

Mnoho příkazů Linuxu přijímá soubor jako parametr a přebírá data z tohoto souboru.  Většina těchto příkazů může také převzít vstup ze streamu.  Chcete-li vytvořit stream, použijte levou lomenou závorku (

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 

A

> 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

A An

files.txt" v okně terminálu." width="646" height="382" >

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

Přesměrování výstupu může také přesměrovat chybové zprávy, pokud s > použijete číslici (v našem příkladu 2).  Jak na to: A

errors.txt" v okně terminálu." width="646" height="122" >

| Trubka

„Trubka“ spojuje povely dohromady. Přebírá výstup z jednoho příkazu a předává jej dalšímu jako vstup. Počet odesílaných příkazů (délka řetězce) je libovolný.

Zde použijeme cat k vložení obsahu souboru words.txt do grep, který extrahuje každý řádek, který obsahuje malé nebo velké „C“. grep pak předá tyto řádky k třídění. řazení používá volbu -r (obrátit), takže seřazené výsledky se zobrazí v obráceném pořadí.

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

Zadali jsme následující:

A

! Logické NOT a operátor historie

Vykřičník (!) je logický operátor, který znamená NE.

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

V tomto příkazovém řádku jsou dva příkazy:
První příkaz je text v hranatých závorkách;

Druhý příkaz je text, který následuje za dvojitým ampersandem &&.

První příkaz používá ! jako logický operátor. Hranaté závorky označují, že bude proveden test. Volba -d (adresář) testuje přítomnost adresáře s názvem backup. Druhý příkaz vytvoří adresář.

Protože dvojité ampersandy oddělují dva příkazy, Bash provede druhý pouze v případě, že první uspěje. To je však opak toho, co potřebujeme. Pokud je test pro adresář „backup“ úspěšný, nemusíme jej vytvářet. A pokud test „záložního“ adresáře selže, druhý příkaz nebude proveden a chybějící adresář nebude vytvořen.

Zde je logický operátor! Působí jako logické NE. Pokud je tedy test úspěšný (tj. adresář existuje), zobrazí se ! převrátí to na „NE úspěch“, což je neúspěch. Takže druhý příkaz není aktivován.

Pokud selže test adresáře (tj. adresář neexistuje), zobrazí se ! změní odpověď na „NE selhání“, což je úspěch. Spustí se tedy příkaz k vytvoření chybějícího adresáře.

To málo! zabalí spoustu úderů, když to potřebujete!

ls -l -d backup

Chcete-li zkontrolovat stav záložní složky, použijte příkaz ls a možnosti -l (dlouhý seznam) a -d (adresář), jak je uvedeno níže:

A

!24

Pomocí vykřičníku můžete také spouštět příkazy z historie příkazů.  Příkaz history uvádí vaši historii příkazů a vy pak zadejte číslo příkazu, který chcete znovu spustit!  k provedení, jak je ukázáno níže:

A

!!

Následující příkaz znovu spustí předchozí příkaz:

$ Variabilní výrazy V prostředí Bash vytváříte proměnné pro uložení hodnot. Některé, jako proměnné prostředí,

vždy existují a můžete k nim přistupovat kdykoli otevřete okno terminálu. Tyto uchovávají hodnoty, jako je vaše uživatelské jméno, domovský adresář a cesta.

echo $USER
echo $HOME
echo $PATH

Pomocí echo můžete zobrazit hodnotu, kterou má proměnná – stačí před název proměnné uvést znak dolaru ($), jak je znázorněno níže:

An

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

Chcete-li vytvořit proměnnou, musíte ji pojmenovat a zadat hodnotu, kterou má uchovávat.  K vytvoření proměnné nemusíte používat znak dolaru.  $ přidáte pouze tehdy, když odkazujete na proměnnou, jako v následujícím příkladu:

An

Přidejte složené závorky ( {} ) kolem znaku dolaru a proveďte rozšíření parametru, abyste získali hodnotu proměnné a umožnili další transformace hodnoty.

MyString=123456qwerty

Tím se vytvoří proměnná, která obsahuje řetězec znaků, jak je znázorněno níže:

echo ${MyString}

Pomocí následujícího příkazu odešlete řetězec do okna terminálu:

echo ${myString:6}

Chcete-li vrátit podřetězec začínající na pozici 6 celého řetězce, použijte následující příkaz (je zde nulový posun, takže první pozice je nula):

echo ${myString:0:6}

Pokud chcete echo podřetězec, který začíná na pozici nula a obsahuje dalších šest znaků, použijte následující příkaz:

echo ${myString:4:4}

Následující příkaz použijte k echo podřetězce, který začíná na pozici čtyři a obsahuje další čtyři znaky:

A

Citování speciálních znaků

Pokud chcete použít speciální znak jako doslovný (nespeciální) znak, musíte to říct shellu Bash. Tomu se říká citace a existují tři způsoby, jak to udělat.

Pokud text uzavřete do uvozovek („…“), zabrání to Bashovi v působení na většinu speciálních znaků a ty se pouze vytisknou. Jednou výraznou výjimkou je však znak dolaru ($). Stále funguje jako znak pro výrazy proměnných, takže do výstupu můžete zahrnout hodnoty z proměnných.

echo "Today is $(date)"

Tento příkaz například vytiskne datum a čas:

echo 'Today is $(date)'

Pokud text uzavřete do jednoduchých uvozovek („…“), jak je uvedeno níže, zastaví se tím funkce všech speciálních znaků:

echo "Today is $(date)"

Chcete-li zabránit tomu, aby následující znak fungoval jako speciální znak, můžete použít zpětné lomítko ( ). Tomu se říká „uniknutí“ postavy; viz příklad níže:

Jen si představte speciální znaky jako velmi krátké příkazy. Pokud si zapamatujete jejich použití, může to nesmírně prospět vašemu porozumění shellu Bash – a skriptům jiných lidí.

x