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

Якщо ви хочете освоїти оболонку Bash в Linux, macOS або іншій системі, подібній UNIX, спеціальні символи (наприклад, ~, *, | і >) мають вирішальне значення. Ми допоможемо вам розгадати ці загадкові послідовності команд Linux і стати героєм ієрогліфів.

Що таке особливі символи?

Є набір символів Оболонка Bash лікується двома різними способами. Коли ви вводите їх у оболонку, вони діють як інструкції або команди та повідомляють оболонці виконувати певну функцію. Подумайте про них як про односимвольні команди.

Іноді ви просто хочете надрукувати символ і не потрібен, щоб він виступав як магічний символ. Існує спосіб, у який ви можете використовувати символ для представлення самого себе, а не його спеціальної функції.

Ми покажемо вам, які символи є «спеціальними» або «мета-» символами, а також як ви можете використовувати їх функціонально та буквально.

~ Домашній каталог

Тильда (~) – це скорочення вашого домашнього каталогу. Це означає, що вам не потрібно вводити повний шлях до вашого домашнього каталогу в командах. Де б ви не знаходилися у файловій системі, ви можете використовувати цю команду, щоб перейти до свого домашнього каталогу:

cd ~

The

Ви також можете використовувати цю команду з відносними шляхами. Наприклад, якщо ви перебуваєте десь у файловій системі, яка не знаходиться у вашій домашній папці, і хочете перейти до каталогу архіву у вашому робочому каталозі, скористайтеся для цього тильдою:

cd ~/work/archive

The

. Поточний каталог

Крапка (.) представляє поточний каталог. Ви побачите це в списках каталогів, якщо ви використовуєте параметр -a (усі) з ls.

ls -a

The

Ви також можете використовувати крапку в командах для позначення шляху до поточного каталогу. Наприклад, якщо ви хочете запустити сценарій з поточного каталогу, ви можете викликати його так:

./script.sh

Це сповіщає Bash шукати в поточному каталозі файл script.sh. Таким чином, він не шукатиме в каталогах на вашому шляху відповідний виконуваний файл або сценарій.

The

.. Батьківський каталог

Подвійна крапка або «подвійна крапка» (..) представляє батьківський каталог вашого поточного каталогу. Ви можете використовувати це для переміщення на один рівень вгору в дереві каталогів.

cd ..

The

Ви також можете використовувати цю команду з відносними шляхами, наприклад, якщо ви хочете піднятися на один рівень у дереві каталогів, а потім ввести інший каталог на цьому рівні.

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

cd ../gc_help

The

/ Роздільник каталогів шляхів

Ви можете використовувати пряму косу риску (/), яку часто називають просто косою рискою, щоб розділити каталоги в імені шляху.

ls ~/work/archive

The

Одна пряма коса риса представляє найкоротший можливий шлях до каталогу. Оскільки все в дереві каталогів Linux починається з кореневого каталогу, ви можете використовувати цю команду, щоб швидко перейти до кореневого каталогу:

cd /

The

# Прокоментуйте або обріжте рядки

Найчастіше ви використовуєте хеш або знак числа (#), щоб повідомити оболонку, що далі є коментарем, і він не повинен діяти на нього. Ви можете використовувати його в сценаріях оболонки і — менш корисно — у командному рядку.

# This will be ignored by the Bash shell

The

Однак це насправді не ігнорується, тому що воно додано до вашої історії команд.

Ви також можете використовувати хеш, щоб обрізати рядкову змінну та видалити деякий текст із початку. Ця команда створює рядкову змінну під назвою this_string.

У цьому прикладі ми призначаємо текст «Дейв Гік!» до змінної.

this_string="Dave Geek!"

Ця команда використовує echo для друку слів «How-To» у вікні терміналу. Він отримує значення, збережене в рядковій змінній, за допомогою a розширення параметрів. Оскільки ми додаємо хеш і текст «Дейв», він обрізає цю частину рядка, перш ніж вона буде передана в ехо.

echo How-To ${this_string#Dave}

An

Це не змінює значення, що зберігається в рядковій змінній; це впливає лише на те, що надсилається в ехо. Ми можемо використовувати echo, щоб ще раз надрукувати значення рядкової змінної та перевірити це:

echo $this_string

The

? Підстановка одного символу

Оболонка Bash підтримує три символи підстановки, одним з яких є знак питання (?). Ви використовуєте символи підстановки для заміни символів у шаблонах імен файлів. Ім’я файлу, яке містить символ підстановки, утворює шаблон, який відповідає діапазону імен файлів, а не лише одному.

Підстановка знака питання представляє рівно один символ. Розглянемо такий шаблон імені файлу:

ls badge?.txt

Це перекладається як «список будь-якого файлу з ім’ям, яке починається на «значок» і за яким слідує будь-який один символ перед розширенням імені файлу».

Він відповідає наступним файлам. Зауважте, що деякі мають цифри, а деякі – літери після частини «значка» назви файлу. Підстановка знака питання відповідатиме як літерам, так і цифрам.

The

Однак цей шаблон назви файлу не відповідає «badge.txt», оскільки ім’я файлу не містить жодного символу між «значком» і розширенням файлу. Підстановка знака питання має відповідати відповідному символу в назві файлу.

Ви також можете використовувати знак питання, щоб знайти всі файли з певною кількістю символів в іменах файлів. Тут перераховано всі текстові файли, які містять рівно п’ять символів у назві файлу:

ls ?????.txt

А

* Підстановка послідовності символів

Ви можете використовувати зірочку

ls badge*

символ підстановки для будь-якої послідовності символів, включаючи відсутність символів. Розглянемо такий шаблон імені файлу:

Це відповідає всьому наступному:

An

Він відповідає «badge.txt», оскільки підстановочний знак представляє будь-яку послідовність символів або відсутність символів.

ls source.*

Ця команда відповідає всім файлам, які називаються «джерелом», незалежно від розширення файлу.

[] An

Набір символів Wildcard

Як описано вище, ви використовуєте знак питання для позначення будь-якого окремого символу, а зірочка — для позначення будь-якої послідовності символів (включаючи відсутність символів). [] Ви можете сформувати шаблон підстановки за допомогою квадратних дужок (

) та символи, які вони містять. Відповідний символ у назві файлу повинен відповідати принаймні одному із символів у наборі символів підстановки.

ls badge_0[246].txt

У цьому прикладі команда перекладається як: «будь-який файл із розширенням «.png», ім’я файлу, що починається з «pipes_0», і в якому наступним символом є 2, 4 або 6».

An

ls badge_[01][789].txt

Ви можете використовувати більше одного набору дужок для одного шаблону імені файлу:

An

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

Ви також можете включити діапазони в набір символів.  Наступна команда вибирає файли з номерами від 21 до 25 і від 31 до 35 в імені файлу.

An

; Роздільник команд Shell

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

Ви можете вводити в командному рядку скільки завгодно команд, якщо кожну з них розділяти крапкою з комою (;).  Ми зробимо це в наступному прикладі: An

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

А An

files.txt" у вікні терміналу." width="646" height="382" >

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

Перенаправлення виводу також може перенаправляти повідомлення про помилки, якщо ви використовуєте цифру (2, у нашому прикладі) з >.  Ось як це зробити: А

errors.txt" у вікні терміналу." width="646" height="122" >

| Труба

«Труба» об’єднує команди разом. Він приймає вихід з однієї команди і передає його наступній як вхід. Кількість переданих команд (довжина ланцюжка) довільна.

Тут ми будемо використовувати cat, щоб передати вміст файлу words.txt в grep, який витягує будь-який рядок, який містить букву C у нижньому чи верхньому регістрі. grep потім передасть ці рядки для сортування. сортування використовує параметр -r (зворотний), тому відсортовані результати відображатимуться у зворотному порядку.

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

Ми ввели наступне:

А

! Логічне НЕ конвеєра та оператор історії

Знак оклику (!) є логічним оператором, який означає НІ.

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

У цьому командному рядку є дві команди:
Перша команда – це текст у квадратних дужках;

Друга команда — це текст, що йде після подвійного амперсанда &&.

Перша команда використовує ! як логічний оператор. Квадратні дужки вказують на те, що буде проведено випробування. Параметр -d (каталог) перевіряє наявність каталогу, який називається резервною копією. Друга команда створює каталог.

Оскільки подвійні амперсанди розділяють дві команди, Bash виконає лише другу, якщо перша вдасться. Однак це протилежне тому, що нам потрібно. Якщо перевірка каталогу “резервної копії” пройшла успішно, нам не потрібно його створювати. І якщо перевірка каталогу «резервне» завершиться невдало, друга команда не буде виконана, а відсутній каталог не буде створено.

Ось де логічний оператор! Це діє як логічне НІ. Отже, якщо тест пройшов успішно (тобто каталог існує), ! перевертає це на «НЕ успіх», що є невдачею. Отже, друга команда не активована.

Якщо перевірка каталогу не вдається (тобто каталог не існує), ! змінює відповідь на «НЕ невдача», що є успіхом. Отже, виконується команда створення відсутнього каталогу.

Це мало! дає багато удару, коли вам це потрібно!

ls -l -d backup

Щоб перевірити стан папки резервної копії, ви використовуєте команду ls і параметри -l (довгий список) і -d (каталог), як показано нижче:

А

!24

Ви також можете запускати команди з історії команд зі знаком оклику.  Команда history містить перелік вашої історії команд, а потім ви вводите номер команди, за допомогою якої хочете повторно запустити!  щоб виконати його, як показано нижче:

А

!!

Наступне повторно запускає попередню команду:

$ Змінні вирази В оболонці Bash ви створюєте змінні для зберігання значень. Деякі, як змінні середовища,

завжди існують, і ви можете отримати до них доступ у будь-який час, коли відкриваєте вікно терміналу. Вони містять значення, такі як ваше ім’я користувача, домашній каталог і шлях.

echo $USER
echo $HOME
echo $PATH

Ви можете використовувати echo, щоб побачити значення змінної — просто перед назві змінної поставте знак долара ($), як показано нижче:

An

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

Щоб створити змінну, ви повинні дати їй ім’я та вказати значення для її збереження.  Для створення змінної не потрібно використовувати знак долара.  Ви додаєте $, лише коли посилаєтеся на змінну, як-от у наступному прикладі:

An

Додайте дужки ( {} ) навколо знака долара та виконайте розширення параметра, щоб отримати значення змінної та дозволити подальші перетворення значення.

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 і чужих скриптів.