15 специални символа, които трябва да знаете за Bash

Ако искате да овладеете Bash обвивката на Linux, macOS или друга подобна на UNIX система, специалните знаци (като ~, *, | и >) са от решаващо значение. Ние ще ви помогнем да разгадаете тези загадъчни команди на Linux и да станете герой на йероглифите.

Какво представляват специалните герои?

Има набор от знаци Bash черупка третира по два различни начина. Когато ги въведете в обвивката, те действат като инструкции или команди и казват на обвивката да изпълнява определена функция. Мислете за тях като команди от един знак.

Понякога просто искате да отпечатате символ и не е необходимо той да действа като магически символ. Има начин да използвате символ, за да представите себе си, а не неговата специална функция.

Ще ви покажем кои знаци са „специални“ или „мета-“ знаци, както и как можете да ги използвате функционално и буквално.

~ Домашна директория

Тилдата (~) е съкратено за вашата домашна директория. Това означава, че не е нужно да въвеждате пълния път до вашата домашна директория в команди. Където и да сте във файловата система, можете да използвате тази команда, за да отидете до вашата домашна директория:

cd ~

В

Можете също да използвате тази команда с относителни пътища. Например, ако сте някъде във файловата система, която не е във вашата домашна папка и искате да промените към архивната директория във вашата работна директория, използвайте тилдата, за да го направите:

cd ~/work/archive

В

. Текуща директория

Точка (.) представлява текущата директория. Виждате го в списъците на директории, ако използвате опцията -a (всички) с ls.

ls -a

В

Можете също да използвате точката в командите, за да представите пътя към текущата ви директория. Например, ако искате да стартирате скрипт от текущата директория, ще го извикате така:

./script.sh

Това казва на Bash да търси в текущата директория файла script.sh. По този начин той няма да търси в директориите по пътя ви за съвпадение на изпълним файл или скрипт.

В

.. Родителска директория

Двойната точка или „двойната точка“ (..) представлява родителската директория на текущата ви. Можете да използвате това, за да се придвижите с едно ниво нагоре в дървото на директориите.

cd ..

В

Можете също да използвате тази команда с относителни пътища – например, ако искате да се изкачите с едно ниво нагоре в дървото на директориите и след това да въведете друга директория на това ниво.

Можете също да използвате тази техника, за да преминете бързо към директория на същото ниво в дървото на директориите като текущата ви. Прескачате едно ниво нагоре и след това се връщате надолу в друга директория.

cd ../gc_help

В

/ Разделител на директория на пътя

Можете да използвате наклонена черта (/) – често наричана просто наклонена черта – за разделяне на директориите в име на път.

ls ~/work/archive

В

Една наклонена черта представлява най-краткия възможен път към директорията. Тъй като всичко в дървото на директорията на Linux започва от основната директория, можете да използвате тази команда, за да преминете бързо към основната директория:

cd /

В

# Коментирайте или отрежете струни

Най-често използвате хеша или знака за число (#), за да кажете на обвивката, че това, което следва, е коментар и той не трябва да действа върху него. Можете да го използвате в шел скриптове и – по-малко полезно – в командния ред.

# This will be ignored by the Bash shell

В

Той обаче не се игнорира наистина, защото е добавен към историята на вашите команди.

  Как да активирате (или деактивирате) бисквитки в Mozilla Firefox

Можете също да използвате хеша, за да отрежете променлива на низ и да премахнете някакъв текст от началото. Тази команда създава низова променлива, наречена this_string.

В този пример присвояваме текст „Дейв Гийк!“ към променливата.

this_string="Dave Geek!"

Тази команда използва echo за отпечатване на думите „How-To“ в прозореца на терминала. Той извлича стойността, съхранена в низовата променлива чрез a разширяване на параметрите. Тъй като добавяме хеша и текста „Дейв“, той отрязва тази част от низа, преди да бъде предадена на ехо.

echo How-To ${this_string#Dave}

Ан

Това не променя стойността, съхранена в низовата променлива; засяга само това, което е изпратено до ехо. Можем да използваме echo, за да отпечатаме стойността на низовата променлива още веднъж и да проверим това:

echo $this_string

В

? Заместващ знак за единичен знак

Bash shell поддържа три заместващи знака, единият от които е въпросителният знак (?). Използвате заместващи знаци, за да замените знаците в шаблоните за имена на файлове. Име на файл, което съдържа заместващ знак, образува шаблон, който съответства на диапазон от имена на файлове, а не само на едно.

Въпросителният заместващ знак представлява точно един знак. Помислете за следния шаблон за име на файл:

ls badge?.txt

Това се превежда като „избройте всеки файл с име, което започва с „значка“ и е последвано от всеки единичен знак преди разширението на името на файла.“

Съвпада със следните файлове. Имайте предвид, че някои имат цифри, а други имат букви след частта „значка“ на името на файла. Заместващият знак за въпроси ще съвпада както с букви, така и с цифри.

В

Този шаблон за име на файл обаче не съвпада с „badge.txt“, тъй като името на файла няма нито един знак между „значка“ и разширението на файла. Заместващият знак за въпроси трябва да съвпада със съответен знак в името на файла.

Можете също да използвате въпросителния знак, за да намерите всички файлове с определен брой знаци в имената на файловете. Това изброява всички текстови файлове, които съдържат точно пет знака в името на файла:

ls ?????.txt

А

* Заместващ знак за последователност на знаци

Можете да използвате звездичката

ls badge*

заместващ знак, който означава всяка последователност от знаци, включително никакви знаци. Помислете за следния шаблон за име на файл:

  Какво е Apple Fitness+ и колко струва?

Това съответства на всички от следните:

Ан

Той съответства на „badge.txt“, защото заместващият знак представлява произволна последователност от знаци или никакви знаци.

ls source.*

Тази команда съответства на всички файлове, наречени „източник“, независимо от разширението на файла.

[] Ан

Набор от символи Заместващ знак

Както беше описано по-горе, използвате въпросителния знак, за да представите всеки единичен знак, а звездичката, за да представите всяка последователност от знаци (включително никакви знаци). [] Можете да оформите заместващ знак с квадратните скоби (

) и знаците, които съдържат. След това съответният знак в името на файла трябва да съвпада с поне един от знаците в набора от заместващи знаци.

ls badge_0[246].txt

В този пример командата се превежда като: „всеки файл с разширение „.png“, име на файл, започващо с „pipes_0“ и в който следващият знак е 2, 4 или 6.“

Ан

ls badge_[01][789].txt

Можете да използвате повече от един набор от скоби за шаблон за име на файл:

Ан

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

Можете също да включите диапазони в набора от знаци.  Следната команда избира файлове с номера от 21 до 25 и от 31 до 35 в името на файла.

Ан

; Разделител на команди на Shell

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

Можете да въведете колкото искате команди в командния ред, стига да отделите всяка от тях с точка и запетая (;).  Ще направим това в следния пример: Ан

count.txt; wc -l count.txt; rm count.txt” команда в прозорец на терминала’ width=”646″ height=”122″ onload=”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);” onerror=”this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);”>

Имайте предвид, че втората команда се изпълнява дори ако първата се провали, третата се изпълнява дори ако втората се провали и т.н.

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

Ако искате да спрете последователността на изпълнение, ако една команда не успее, използвайте двоен амперсанд (&&) вместо точка и запетая:

А

& Фонов процес

След като въведете команда в прозорец на терминала и тя завърши, се връщате към командния ред. Обикновено това отнема само момент или два. Но ако стартирате друго приложение, като gedit, не можете да използвате терминалния прозорец, докато не затворите приложението.

gedit command_address.page &

Можете обаче да стартирате приложение като фонов процес и да продължите да използвате прозореца на терминала.  За да направите това, просто добавете амперсанд към командния ред:

А

Bash ви показва идентификатора на процеса на стартираното и след това ви връща към командния ред. След това можете да продължите да използвате вашия терминален прозорец.

sort 

Много Linux команди приемат файл като параметър и вземат своите данни от този файл.  Повечето от тези команди могат също да приемат вход от поток.  За да създадете поток, използвате лявата ъглова скоба (

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 

А

> 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

А Ан

files.txt" команда в прозорец на терминал." ширина = "646" височина = "382" >

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

Пренасочването на изхода може също да пренасочва съобщенията за грешка, ако използвате цифра (2, в нашия пример) с >.  Ето как да го направите: А

errors.txt" команда в прозорец на терминал." ширина = "646" височина = "122" >

| Тръба

„Тръба“ свързва командите заедно. Той взема изхода от една команда и го подава към следващата като вход. Броят на изпратените команди (дължината на веригата) е произволен.

Тук ще използваме cat, за да подадем съдържанието на файла Words.txt в grep, който извлича всеки ред, който съдържа „C“ с малки или главни букви. След това grep ще предаде тези редове за сортиране. сортирането използва опцията -r (обратна), така че сортираните резултати ще се появят в обратен ред.

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

Написахме следното:

А

! Оператор на логическо НЕ и история

Удивителният знак (!) е логически оператор, който означава НЕ.

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

В този команден ред има две команди:
Първата команда е текстът в квадратните скоби;

Втората команда е текстът, който следва двойните амперсанди &&.

Първата команда използва ! като логически оператор. Квадратните скоби показват, че ще бъде направен тест. Опцията -d (директория) тества за наличието на директория, наречена архивиране. Втората команда създава директорията.

Тъй като двойните амперсанди разделят двете команди, Bash ще изпълни втората само ако първата успее. Това обаче е обратното на това, от което се нуждаем. Ако тестът за “backup” директорията е успешен, не е необходимо да я създаваме. И ако тестът за директорията „backup“ не успее, втората команда няма да бъде изпълнена и липсващата директория няма да бъде създадена.

Тук е логическият оператор! влиза. Действа като логическо НЕ. Така че, ако тестът е успешен (т.е. директорията съществува), ! обръща това на „НЕ успех“, което е провал. Така че втората команда не е активирана.

Ако тестът на директорията се провали (т.е. директорията не съществува), ! променя отговора на „НЕ провал“, което е успех. И така, командата за създаване на липсващата директория се изпълнява.

Това малко! има много удар, когато имате нужда!

ls -l -d backup

За да проверите състоянието на папката за архивиране, използвате командата ls и опциите -l (дълъг списък) и -d (директория), както е показано по-долу:

А

!24

Можете също да изпълнявате команди от историята на командите си с удивителния знак.  Командата history изброява историята на вашите команди и след това въведете номера на командата, с която искате да изпълните отново!  за да го изпълни, както е показано по-долу:

А

!!

Следното стартира отново предишната команда:

$ Променливи изрази В обвивката на Bash създавате променливи, които да задържат стойности. Някои, като променливи на средата,

винаги съществуват и можете да получите достъп до тях всеки път, когато отворите прозорец на терминала. Те съдържат стойности, като вашето потребителско име, домашна директория и път.

echo $USER
echo $HOME
echo $PATH

Можете да използвате echo, за да видите стойността на променливата – просто предхождайте името на променливата със знака за долар ($), както е показано по-долу:

Ан

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

За да създадете променлива, трябва да й дадете име и да предоставите стойност, която да се съхранява.  Не е нужно да използвате знака за долар, за да създадете променлива.  Добавяте $ само когато препращате към променлива, като например в следния пример:

Ан

Добавете скоби ( {} ) около знака за долар и извършете разширяване на параметъра, за да получите стойността на променливата и да позволите по-нататъшни трансформации на стойността.

MyString=123456qwerty

Това създава променлива, която съдържа низ от знаци, както е показано по-долу:

echo ${MyString}

Използвайте следната команда, за да повторите низа в прозореца на терминала:

echo ${myString:6}

За да върнете подниза, започващ от позиция 6 от целия низ, използвайте следната команда (има нулево отместване, така че първата позиция е нула):

echo ${myString:0:6}

Ако искате да повторите подниз, който започва от позиция нула и съдържа следващите шест знака, използвайте следната команда:

echo ${myString:4:4}

Използвайте следната команда, за да повторите подниз, който започва на позиция четири и съдържа следващите четири знака:

А

Цитиране на специални знаци

Ако искате да използвате специален символ като буквален (неспециален) символ, трябва да кажете на обвивката на Bash. Това се нарича цитиране и има три начина да го направите.

Ако поставите текста в кавички (“…”), това не позволява на Bash да действа върху повечето специални знаци и те просто се отпечатват. Едно забележително изключение обаче е знакът за долар ($). Той все още функционира като символ за изрази за променливи, така че можете да включите стойностите от променливи във вашия изход.

echo "Today is $(date)"

Например, тази команда отпечатва датата и часа:

echo 'Today is $(date)'

Ако поставите текста в единични кавички ('...'), както е показано по-долу, той спира функцията на всички специални знаци:

echo "Today is $(date)"

Можете да използвате обратна наклонена черта ( ), за да предотвратите функционирането на следния символ като специален знак. Това се нарича „бягство“ от героя; виж примера по-долу:

Просто мислете за специалните символи като за много кратки команди. Ако запомните употребата им, това може да е от полза за разбирането ви за обвивката на Bash и скриптовете на други хора.