Службові символи, використовувані в текстах сценаріїв.
#
Коментарі. Рядки, що починаються з символу # ( за винятком комбінації #! ) - є коментарями.
# Цей рядок - коментар.
Коментарі можуть розташовуватися і в кінці рядка з виконуваним кодом.
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
Вихід 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; echoCtl-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 0Ctl-Q
Resume (XON).
Ця комбінація "відновлює" роботу stdin терміналу (див. Нижче).
Ctl-S
Suspend (XOFF).
Ця комбінація "заморожує" stdin терміналу. (Для відновлення "працездатності" - використовуйте комбінацію Ctl-Q)
Ctl-U
Стирання рядка введення.
Ctl-Z
Призупинення процесу.
пробільний символ
використовується як роздільник команд або змінних. Як пробільного символу можуть виступати - власне пробіл (space), символ табуляції, символ перекладу рядка, символ повернення каретки або комбінація з перерахованих вище символів. У деяких випадках, таких як присвоювання значень змінним , Використання символів пробілів неприпустимо.
Порожні рядки ніяк не обробляються командним інтерпретатором і можуть вільно використовуватися для візуального виділення окремих блоків сценарію.
$ IFS - змінна спеціального призначення. Містить символи-роздільники полів, які використовуються деякими командами. По-замовчуванню - пробільні символи.
Чому?HOSTNAME?
USER?
MAIL?
У деяких висловах символ?
Символ?
Змінна $?
If [ "$?
Яким словником ви користуєтеся?
Чому?