Статьи

Глава 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 [ "$?
Яким словником ви користуєтеся?
Чому?

Новости

Как создать фото из видео
Кризис заставляет искать дополнительные источники дохода. Одним из таких источников может стать торговля на валютном рынке Форекс. Но чтобы не потерять свои деньги необходимо работать с надежным брокером.

Как оформить группу в вконтакте видео
Дано хотел свой магазин в вк, но не знал с чего начать его делать. Так как хотелось не банальный магазин с кучей ссылок и фото, а красиво оформленный. С меню, с аватаркой. После просмотра видео создал