Статьи

Глава 3. Службові символи

Службові символи, використовувані в текстах сценаріїв.

#

Коментарі. Рядки, що починаються з символу # ( за винятком комбінації #! ) - є коментарями.

# Цей рядок - коментар.

Коментарі можуть розташовуватися і в кінці рядка з виконуваним кодом.

echo "Далі слід коментар." # Це коментар.

Коментарям можуть передувати прогалини (Пробіл, табуляція).

# Перед коментарем варто символ табуляції. # Перед коментарем варто символ табуляції

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

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

echo "Символ # не означає початок коментаря." echo 'Символ # не означає початок коментаря.' echo Символ \ # не означає початок коментаря. echo А тут символ # означає початок коментаря. echo $ {PATH # *:} # Підстановка - НЕ коментар. echo $ ((2 # 101011)) # База системи числення - НЕ коментар. # Спасибі, SC

Лапки " 'і \ екранують дію символу #.

В операціях пошуку за шаблоном символ # так само не сприймається як початок коментаря.

Роздільник команд. [Точка-з-коми] Дозволяє записувати дві і більше команд в одному рядку.

echo hello; echo there if [-x "$ filename"]; then # Зверніть увагу: "if" І "then" розділені крапкою з комою. # Чому? echo "Файл $ filename знайдений."; cp $ filename $ filename.bak else echo "Файл $ filename не найден."; touch $ filename fi; echo "Кінець."

Слід зазначити, що символ ";" іноді так само як і # необхідно екранувати .

Обмежувач в операторі вибору case . [Подвійна-точка-з-коми]

case "$ variable" in abc) echo "$ variable = abc" ;; xyz) echo "$ variable = xyz" ;; esac.

команда "точка". еквівалент команди source (Див. приклад 11-19 ). це вбудована команда bash.

.

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

bash $ touch .hidden-file bash $ ls -l total 10 -rw-r - r-- 1 bozo 4034 Jul 18 22:04 data1.addressbook -rw-r - r-- 1 bozo 4602 May 25 13: 58 data1.addressbook.bak -rw-r - r-- 1 bozo 877 Dec 17 2000 employment.addressbook bash $ ls -al total 14 drwxrwxr-x 2 bozo bozo 1024 Aug 29 20:54 ./ drwx ---- - 52 bozo bozo 3072 Aug 29 20:51 ../ -rw-r - r-- 1 bozo bozo 4034 Jul 18 22:04 data1.addressbook -rw-r - r-- 1 bozo bozo 4602 May 25 13:58 data1.addressbook.bak -rw-r - r-- 1 bozo bozo 877 Dec 17 2000 employment.addressbook -rw-rw-r-- 1 bozo bozo 0 Aug 29 20:54 .hidden-file

Якщо мається на увазі ім'я каталогу, то одна точка означає поточний каталог і дві точки - каталог рівнем вище, або батьківський каталог.

bash $ pwd / home / bozo / projects bash $ cd. bash $ pwd / home / bozo / projects bash $ cd .. bash $ pwd / home / bozo /

Символ точка досить часто використовується для позначення каталогу призначення в операціях копіювання / переміщення файлів.

bash $ cp / home / bozo / current_work / junk / *. .

Символ "точка" в операціях пошуку. При виконанні пошуку за шаблоном , в регулярних виразах , Символ "крапка" позначає одиночний символ.

"

Подвійні лапки . У рядку "STRING", обмеженою подвійними лапками не виконується інтерпретація більшості службових символів, які можуть перебувати в рядку. см.

глава 5 .

'

одинарні лапки . [Одинарні лапки] 'STRING' екранує всі службові символи в рядку STRING. Це більш сувора форма екранування. Дивіться також глава 5 .

,

кома . Оператор кома використовується для обчислення серії арифметичних виразів. Обчислюються всі вирази, але повертається результат останнього виразу.

let "t2 = ((a = 9, 15/3))" # Присваивает значення змінної "a" і обчислює "t2". \

escape . [зворотний слеш] Комбінація \ X "екранує" символ X. Аналогічний ефект має комбінація з "одинарними лапками", тобто 'X'. Символ \ може використовуватися для екранування лапок "і '.

Більш детального розгляду теми екранування присвячена глава 5 .

/

Роздільник, використовуваний у вказівці шляху до каталогів і файлів. [Слеш] Відділяє елементи шляху до каталогів і файлів (наприклад / home / bozo / projects / Makefile).

В арифметичних операціях - це оператор ділення.

`

підстановка команд . [Зворотні лапки] Зворотні лапки можуть використовуватися для запису в змінну команди `command`.

:

порожня команда. [двокрапка] Це еквівалент операції "NOP" (no op, немає операції). Може розглядатися як синонім вбудованої команди true . Команда ":" так само є вбудованої командою Bash, яка завжди повертає "True" (0).

Безкінечний цикл:

while: do operation-1 operation-2 ... operation-n done # Те ж саме: # while true # do # ... # done

Символ-заповнювач в умовному операторі if / then:

if condition then: # Ніяких дій не проводиться і управління передається далі else take-some-action fi

Як символ-заповнювач в операціях, які передбачають наявність двох операндів, см. приклад 8-2 і параметри за замовчуванням .

: $ {Username = `whoami`} # $ {username =` whoami`} без символу: видає повідомлення про помилку, # якщо "username" не є командою ...

Як символ-заповнювач для оператора вкладеного документа . Див. приклад 17-10 .

В операціях з підстановкою параметрів (Див. приклад 9-13 ).

: $ {HOSTNAME?} $ {USER?} $ {MAIL?} # Висновок повідомлення про помилку, якщо одна або більше змінних не визначено.

В операціях заміни підрядка з підстановкою значень змінних .

У комбінації з оператором> ( оператор перенаправлення виведення ), Усікає довжину файлу до нуля. Якщо вказано неіснуючий файл - то він створюється.

:> Data.xxx # Файл "data.xxx" - порожній # Той же ефект має команда cat / dev / null> data.xxx # Однак в даному випадку не проводиться створення нового процесу, оскільки ":" є вбудованої командою.

Див. також приклад 12-14 .

У комбінації з оператором >> - якщо задано ім'я існуючого файлу, то ця комбінація на нього ніяк не впливає (: >> target_file). Якщо задано ім'я неіснуючого файлу, то він створюється.

Якщо задано ім'я неіснуючого файлу, то він створюється

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

Символ: може використовуватися для створення коментарів, хоча і не рекомендується. Якщо рядок коментаря починається з символу #, то такий рядок не перевіряється інтерпретатором на наявність помилок. Однак в разі оператора: це не так.

: Це коментар, який генерує повідомлення про помилку, (if [$ x -eq 3]).

Символ ":" може використовуватися як роздільник полів в / etc / passwd і змінної $ PATH .

bash $ echo $ PATH / usr / local / bin: / bin: / usr / bin: / usr / X11R6 / bin: / sbin: / usr / sbin: / usr / games!

інверсія (або логічне заперечення) використовується в умовних операторах. Оператор! інвертує код завершення команди, до якої він застосований. (Див. приклад 6-2 ). Так само використовується для логічного заперечення в операціях порівняння, наприклад, операція порівняння "дорівнює" ( = ), При використанні оператора заперечення, перетворюється в операцію порівняння - "не дорівнює" (! =). Символ! є зарезервованим ключовим словом BASH.

У деяких випадках символ! використовується для непрямого звернення до змінних .

Крім того, з командного рядка оператор! запускає механізм історій Bash (див. додаток H ). Примітно, що цей механізм недоступний із сценаріїв (тобто виключно з командного рядка).

*

символ-шаблон. [Зірочка] Символ * служить "шаблоном" для підстановки в імена файлів. Одиночний символ * означає будь-яке ім'я файлу в заданому каталозі.

bash $ echo * abs-book.sgml add-drive.sh agram.sh alias.sh

В регулярних виразах токен * представляє будь-яку кількість (в тому числі і 0) символів.

*

арифметичний оператор . В арифметичних виразах символ * позначає операцію множення.

Подвійна зірочка (два символи зірочки, наступних підряд один за одним - **), позначає операцію піднесення до степеня .

?

Оператор перевірки умови. У деяких висловах символ? служить для перевірки виконання умови.

В конструкціях з подвійними дужками , Символ? подібний до тримісному оператору мови C. Див. приклад 9-29 .

У виразах з підстановкою параметра , Символ? перевіряє - чи встановлена ​​змінна .

?

сиволов-шаблон. Символ? позначає одиночний символ при підстановці в імена файлів. В регулярних виразах служить для позначення одиночного символу .

$

підстановка змінної .

var1 = 5 var2 = 23skidoo echo $ var1 # 5 echo $ var2 # 23skidoo

Символ $, що передує імені змінної, вказує на те, що буде отримано значення змінної.

$

end-of-line (кінець рядка). В регулярних виразах , Символ "$" позначає кінець рядка.

$ {}

підстановка параметра .

$ *, $ @

параметри командного рядка .

$?

код завершення. Змінна $? зберігає код завершення останньої виконаної команди, функції або сценарію.

$$

id процесу. Мінлива $$ зберігає id процесу сценарію.

()

група команд.

ініціалізація масивів.

Array = (element1 element2 element3) {xxx, yyy, zzz, ...}

Фігурні дужки.

grep Linux file *. {txt, htm *} # Пошук всіх входжень слова "Linux" # в файлах "fileA.txt", "file2.txt", "fileR.html", "file-87.htm", та ін .

Команда інтерпретується як список команд, між якими ставиться крапка з комою, з варіаціями, представленими в фігурних дужках. [11] При інтерпретації імен файлів ( підстановка ) Використовуються параметри, укладені у фігурні дужки.

Використання неекранованих або неокавиченних прогалин всередині фігурних дужок неприпустимо.

echo {file1, file2} \: {\ A, "B", "C"}

file1: A file1: B file1: C file2: A file2: B file2: C

{}

Блок коду. [Фігурні дужки] Відомий так само як "вкладений блок", ця конструкція, фактично, створює анонімну функцію. Однак, на відміну від звичайних функцій , Змінні, створювані у вкладених блоках коду, доступні осяжний сценарієм.

bash $ {local a; a = 123; } Bash: local: can only be used in a function a = 123 {a = 321; } Echo "a = $ a" # a = 321 (значення, присвоєне у вкладеному блоці коду) # Спасибі, SC

Код, укладений у фігурні дужки, може виконувати перенаправлення вводу-виводу .

Приклад 3-1. Вкладені блоки і перенаправлення вводу-виводу

#! / Bin / bash # Читання рядків з файлу / etc / fstab. File = / etc / fstab {read line1 read line2} <$ File echo "Перший рядок в $ File:" echo "$ line1" echo echo "Другий рядок в $ File:" echo "$ line2" exit 0

Приклад 3-2. Збереження результату виконання вкладеного блоку в файл

#! / Bin / bash # rpm-check.sh # Запитує опис rpm-архіву, список файлів, і перевіряється можливість установки. # Результат зберігається в файлі. # # Цей сценарій ілюструє порядок роботи з вкладеними блоками коду. SUCCESS = 0 E_NOARGS = 65 if [-z "$ 1"] then echo "Порядок використання:` basename $ 0` rpm-file "exit $ E_NOARGS fi {echo echo" Опис архіву: "rpm -qpi $ 1 # Запит опису. echo echo "Список файлів:" rpm -qpl $ 1 # Запит списку. echo rpm -i --test $ 1 # Перевірка можливості установки. if [ "$?" -eq $ SUCCESS] then echo "$ 1 може бути встановлений." else echo "$ 1 - установка неможлива!" fi echo}> "$ 1.test" # Перенаправлення виводу в файл. echo "Результати перевірки rpm-архіву знаходяться в файлі $ 1.test" # За додатковою інформацією по ключам команди rpm см. man rpm. exit 0 #

На відміну від груп команд в (круглих дужках), описаних вище, вкладені блоки коду, укладені в {фігурні дужки} виконуються в межах того ж процесу, що і сам скрипт (тобто не викликають запуск дочірнього процесу - subshell ). [12]

{} \;

pathname - повне ім'я файлу (тобто шлях до файлу і його ім'я). Найчастіше використовується спільно з командою find .

Зверніть увагу на те, що символ ";", яким завершується ключ -exec команди find, екранується зворотним слешем. Це необхідно, щоб запобігти його інтерпретацію.

[]

test.

Перевірка істинності вираження, укладеного в квадратні дужки []. Примітно, що частиною вбудованої команди test (і її синонімом), І не має ніякого відношення до "зовнішньої" утиліті / usr / bin / test.

[[]]

test.

Перевірка істинності вираження, укладеного між [[]] ( зарезервоване слово інтерпретатора).

Див. Опис конструкції [[...]] нижче.

[]

елемент масиву.

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

Array [1] = slot_1 echo $ {Array [1]} []

діапазон символів.

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

(())

подвійні круглі дужки.

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

Див. Обговорення, присвячене конструкції ((...)) .

> & >> & >> <

перенаправлення .

Конструкція scriptname> filename перенаправляє висновок scriptname в файл filename. Якщо файл filename вже існував, то його колишній уміст буде втрачено.

Конструкція command &> filename перенаправляє висновок команди command, як зі stdout, так і з stderr, в файл filename.

Конструкція command> & 2 перенаправляє висновок зі stdout на stderr.

Конструкція scriptname >> filename додає висновок scriptname до файлу filename. Якщо задано ім'я неіснуючого файлу, то він створюється.

підстановка процесу .

(command)>

<(command)

В операціях порівняння , Символи "<" і ">" позначають операції порівняння рядків .

А також - операції порівняння цілих чисел . Див. також приклад 12-9 .

<<

перенаправлення вводу на вбудований документ .

<,>

Посимвольного ASCII-порівняння .

veg1 = carrots veg2 = tomatoes if [[ "$ veg1" < "$ veg2"]] then echo "Не дивлячись на те, що в словнику слово $ veg1 передує слову $ veg2," echo "це ніяк не відображає мої кулінарні вподобання. " else echo "Цікаво. Яким словником ви користуєтеся?" fi \ <\>

кордони окремих слів в регулярних виразах .

bash $ grep '\ <the \>' textfile

конвеєр. Передає висновок попередньої команди на введення наступної або на вхід командного інтерпретатора shell. Цей метод часто використовується для зв'язування послідовності команд в єдиний ланцюжок.

echo ls -l | sh # Передає висновок "echo ls -l" команлному інтерпретатора shell, # + той же результат дає проста команда "ls -l". cat * .lst | sort | uniq # Об'єднує всі файли ".lst", сортує вміст і видаляє повторювані рядки.

В конвеєр можуть об'єднуватися і сценарії на мові командної оболонки.

#! / Bin / bash # uppercase.sh: Перетворення символів, що вводять в верхній регістр. tr 'az' 'AZ' # Діапазони символів повинні бути укладені в лапки # + щоб запобігти породження імен файлів від однобуквених імен файлів. exit 0

А тепер спробуємо об'єднати в конвеєр команду ls -l з цим сценарієм.

bash $ ls -l | ./uppercase.sh -RW-RW-R-- 1 BOZO BOZO 109 APR 7 19:49 1.TXT -RW-RW-R-- 1 BOZO BOZO 109 APR 14 16:48 2.TXT -RW-R- -R-- 1 BOZO BOZO 725 APR 20 20:56 DATA-FILE bash $ ls -l |

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

cat file1 file2 | ls -l | sort # Висновок команди "cat file1 file2" буде втрачено.

Конвеєр виповнюється в дочірньому процесі , А тому - не має доступу до змінних сценарію.

variable = "initial_value" echo "new_value" | read variable echo "variable = $ variable" # variable = initial_value

Якщо одна з команд в конвеєрі завершується аварійно, то це призводить до аварійного завершення роботи всього конвеєра.

> |

примусове перенаправлення, навіть якщо встановлений ключ noclobber option .

логічна операція OR (логічне АБО) . В операціях перевірки умов , Оператор || повертає 0 (success), якщо один з операндів має значення true (ІСТИНА).

&

Виконання завдання в тлі. Команда, за якою стоїть &, буде виконуватися у фоновому режимі.

bash $ sleep 10 & [1] 850 [1] + Done sleep 10

У сценаріях команди, і навіть цикли можуть запускатися в фоновому режимі.

Приклад 3-3. Запуск циклу у фоновому режимі

#! / Bin / bash # background-loop.sh for i in 1 2 3 4 5 6 7 8 9 10 # Перший цикл. do echo -n "$ i" done & # Запуск циклу в тлі. # Іноді можливі випадки виконання цього циклу після другого циклу. echo # Цей 'echo' іноді не відображається на екрані. for i in 11 12 13 14 15 16 17 18 19 20 # Другий цикл. do echo -n "$ i" done echo # Цей 'echo' іноді не відображається на екрані. # ================================================= ===== # Очікується, що даний сценарій виведе наступну послідовність: # 1 2 3 4 5 6 7 8 9 10 # 11 12 13 14 15 16 17 18 19 20 # Іноді можливий такий варіант: # 11 12 13 14 15 16 17 18 19 20 # 1 2 3 4 5 6 7 8 9 10 bozo $ # (Другий 'echo' не був виконаний. Чому?) # Зрідка можливий такий варіант: # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # (Перший 'echo' не був виконаний. Чому?) # Вкрай рідко зустрічається і таке: # 11 12 13 1 2 3 4 5 6 7 8 9 10 14 15 16 17 18 19 20 # Другий цикл почав виконуватися раніше першого. exit 0 #

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

&&

Логічна операція AND (логічне І) . В операціях перевірки умов , Оператор && повертає 0 (success) тоді, і тільки тоді, коли обидва операнда мають значення true (ІСТИНА).

-

префікс ключа. З цього символу починаються опціональні ключі команд.

COMMAND - [Option1] [Option2] [...]

ls -al

sort -dfu $ filename

set - $ variable

if [$ file1 -ot $ file2] then echo "Файл $ file1 був створений раніше ніж $ file2." fi if [ "$ a" -eq "$ b"] then echo "$ a дорівнює $ b." fi if [ "$ c" -eq 24 -a "$ d" -eq 47] then echo "$ c дорівнює 24, а $ d одно 47." fi -

перенаправлення з / в stdin або stdout. [Дефіс]

(Cd / source / directory && tar cf -.) | (Cd / dest / directory && tar xpvf -) # Переміщення повного дерева файлів і підкаталогів з однієї директорії в іншу # [спасибі Алану Коксу (Alan Cox) <[email protected]>, за невеликі поправки] # 1 ) cd / source / directory Перехід в вихідний каталог, вміст якого буде переміщено # 2) && "І-список": завдяки цьому всі наступні команди будуть виконані # тільки тоді, коли 'cd' завершиться успішно # 3) tar cf -. ключем 'c' архіватор 'tar' створює новий архів, # ключем 'f' (file) і подальшим '-' задається файл архіву - stdout, # в архів поміщається поточний каталог ( '.') з вкладеними підкаталогами. # 4) | конвеєр з ... # 5) (...) subshell-му (дочірнім екземпляром командної оболонки) # 6) cd / dest / directory Перехід в каталог призначення. # 7) && "І-список", див. Вище # 8) tar xpvf - Розархівація ( 'x'), зі збереженням атрибутів "власника" і прав доступу ( 'p') до файлів, # з видачею більш докладних повідомлень на stdout ( 'v'), # файл архіву - stdin ( 'f' з подальшим '-'). # # Примітно, що 'x' - це команда, а 'p', 'v' і 'f' - ключі # Во как! # Елегантніший варіант: # cd source-directory # tar cf -. | (Cd ../target-directory; tar xzf -) # # cp -a / source / directory / dest має той же ефект. bunzip2 linux-2.4.3.tar.bz2 | tar xvf - # --разархівірованіе tar-файла-- | --затем файл передається утиліті "tar" - # Якщо у вас утиліта "tar" не підтримує роботу з "bunzip2", # тоді доведеться виконувати роботу в два етапи, з використанням конвеєра. # Метою даного прикладу є розархівування тарбола (tar.bz2) з вихідними текстами ядра.

Зверніть увагу, що в цьому контексті "-" - не самостійна оператор Bash, а скоріше опція, розпізнавана деякими утилітами Unix (такими як tar, cat і т.п.), які виводять результати своєї роботи в stdout.

bash $ echo "whatever" | cat - whatever

У разі, коли очікується ім'я файлу, тоді "-" перенаправляє висновок на stdout (згадайте приклад з tar cf) або приймає введення з stdin.

bash $ file Usage: file [-bciknvzL] [-f namefile] [-m magicfiles] file ...

Сама по собі команда file без параметрів завершується з повідомленням про помилку.

Додамо символ "-" і отримаємо більш корисний результат. Це змусить командний інтерпретатор очікувати введення від користувача.

bash $ file - abc standard input: ASCII text bash $ file - #! / bin / bash standard input: Bourne-Again shell script text executable

Тепер команда приймає введення користувача з stdin і аналізує його.

Використовуючи передачу stdout по конвеєру іншим командам, можна виконувати досить ефектні трюки, наприклад вставка рядків в початок файлу .

За допомогою команди diff - знаходити відмінності між одним файлом і частиною іншого:

grep Linux file1 | diff file2 -

І нарешті приклад використання службового символу "-" з командою tar .

Приклад 3-4. Резервне архівування всіх файлів, які були змінені протягом останньої доби

#! / Bin / bash # Резервне архівування (backup) всіх файлів в поточному каталозі, # що були змінені протягом останніх 24 годин # + ​​в тарболл (tarball) (.tar.gz - файл). BACKUPFILE = backup archive = $ {1: - $ BACKUPFILE} # На випадок, якщо ім'я архіву в командному рядку не задано, # + тобто по-замовчуванню ім'я архіву - "backup.tar.gz" tar cvf - `find. -mtime -1 -type f -print`> $ archive.tar gzip $ archive.tar echo "Каталог $ PWD заархівований в файл \" $ archive.tar.gz \ "." # Stephane Chazelas зауважив, що вищенаведений код буде "падати" # + якщо буде знайдено занадто багато файлів # + або якщо імена файлів будуть містити символи пробілу. # Їм запропонований альтернативний код: # ------------------------------------------- ------------------------ # find. -mtime -1 -type f -print0 | xargs -0 tar rvf "$ archive.tar" # використовується версія GNU утиліти "find". # Find. -mtime -1 -type f -exec tar rvf "$ archive.tar" '{}' \; # Більш універсальний варіант, хоча і більш повільний, # зате може використовуватися в інших версіях UNIX. # ------------------------------------------------- ------------------ exit 0 #

Можуть виникнути конфліктні ситуації між опреатора перенаправлення "-" і іменами файлів, що починаються з символу "-". Тому сценарій повинен перевіряти імена файлів і предаварять їх префіксом шляху, наприклад, ./-FILENAME, $ PWD / -FILENAME або $ PATHNAME / -FILENAME.

Якщо значення змінної починається з символу "-", то це теж може бути причиною появи помилок.

var = "- n" echo $ var # В даному випадку команда придбає вид "echo -n" і нічого не виведе. -

попередній робочий каталог. [дефіс] Команда cd - виконає перехід в попередній робочий каталог, шлях до якого зберігається в змінної оточення $ OLDPWD .

Не плутайте оператор "-" (попереднього робочого каталогу) з оператором "-" (перепризначення). Ще раз нагадаю, що інтерпретація символу "-" залежить від контексту, в якому він вживається.

-

Мінус. Знак мінус в арифметичних операціях .

=

Символ "дорівнює". оператор присвоювання

залежних від контексту застосування , Символ "=" може виступати в якості оператора порівняння .

+

Плюс. Оператор складання в арифметичних операціях .

залежних від контексту застосування , Символ + може виступати як оператор регулярного виразу .

+

Ключ (опція). Додатковий прапор для ключів (опцій) команд.

Окремі зовнішні і вбудовані команди використовують символ "+" для вирішення деякої опції, а символ "-" - для заборони.

%

модуль . Модуль (залишок від ділення) - арифметична операція .

залежних від контексту застосування , Символ% може виступати в якості шаблону .

~

домашній каталог. [Тильда] Відповідає вмісту внутрішньої змінної $ HOME . ~ bozo - домашній каталог користувача bozo, а команда ls ~ bozo виведе вміст його домашнього каталогу. ~ / - це домашній каталог поточного користувача, а команда ls ~ / виведе вміст домашнього каталогу поточного користувача.

bash $ echo ~ bozo / home / bozo bash $ echo ~ / home / bozo bash $ echo ~ / / home / bozo / bash $ echo ~: / home / bozo: bash $ echo ~ nonexistent-user ~ nonexistent-user ~ +

поточний робочий каталог. Відповідає вмісту внутрішньої змінної $ PWD .

~ -

попередній робочий каталог. Відповідає вмісту внутрішньої змінної $ OLDPWD .

^

початок-рядки. В регулярних виразах символ "^" задає початок рядка тексту.

керуючий символ

змінює поведінку терміналу або управляє висновком тексту. Керуючий символ набирається з клавіатури як комбінація CONTROL + <клавіша>.

  • Ctl-B

    Курсор - на одну позицію назад (без видалення літери).

  • Ctl-C

    Переривання виконання процесу.

  • Ctl-D

    Вихід з командного інтерпретатора (log out) (аналог команди exit ).

    "EOF" (ознака кінця файлу). Цей символ може виступати в якості завершального при введенні з stdin.

  • Ctl-G

    "BEL" (звуковий сигнал - "дзвінок").

  • Ctl-H

    Backspace ( "забій") - видалення попереднього символу.

    #! / Bin / bash # Вставка символу Ctl-H в рядок. a = "^ H ^ H" # Два символи Ctl-H (backspace). echo "abcdef" # abcdef echo -n "abcdef $ a" # abcd f # Пропуск в кінці ^ ^ подвійний крок назад. echo -n "abcdef $ a" # abcdef # Прогалини в кінці немає backspace не працює (чому?). № Результати можуть вийти зовсім не ті, що ви очікуєте. echo; echo
  • Ctl-I

    Горизонтальна табуляція.

  • Ctl-J

    Переклад рядка.

  • Ctl-K

    Вертикальна табуляція.

  • Ctl-L

    Переклад формату (очищення екрана (вікна) терміналу). аналогічна команді clear .

  • Ctl-M

    Повернення каретки.

    #! / Bin / bash # Спасибі Lee Maschmeyer, за цей приклад. read -n 1 -s -p $ 'Control-M - переводить курсор в початок цього ж рядка. Натисніть Enter. \ X0d '# Зрозуміло, що,' x0d '- це # шістнадцятковий еквівалент Control-M. echo> & 2 # Переклад рядка read -n 1 -s -p $ 'Control-J - переводить курсор в початок іншого рядка. \ X0a 'echo> & 2 # Control-J - це новий рядок. read -n 1 -s -p $ 'А Control-K \ x0b - вниз.' echo> & 2 # Control-K - це вертикальна табуляція. exit 0
  • Ctl-Q

    Resume (XON).

    Ця комбінація "відновлює" роботу stdin терміналу (див. Нижче).

  • Ctl-S

    Suspend (XOFF).

    Ця комбінація "заморожує" stdin терміналу. (Для відновлення "працездатності" - використовуйте комбінацію Ctl-Q)

  • Ctl-U

    Стирання рядка введення.

  • Ctl-Z

    Призупинення процесу.

пробільний символ

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

Порожні рядки ніяк не обробляються командним інтерпретатором і можуть вільно використовуватися для візуального виділення окремих блоків сценарію.

$ IFS - змінна спеціального призначення. Містить символи-роздільники полів, які використовуються деякими командами. По-замовчуванню - пробільні символи.

Чому?
HOSTNAME?
USER?
MAIL?
У деяких висловах символ?
Символ?
Змінна $?
If [ "$?
Яким словником ви користуєтеся?
Чому?

Новости