Відмінності між версіями «Короткий опис командного інтерпретатора Shell»
Armyguy (обговорення • внесок) (→НАЙПРОСТІШІ ЗАСОБИ SHELL) |
Armyguy (обговорення • внесок) (→Найпростіші засоби SHELL) |
||
Рядок 16: | Рядок 16: | ||
== Найпростіші засоби SHELL == | == Найпростіші засоби SHELL == | ||
+ | <p> | ||
+ | Командна мова <b>shell</b> фактично є мовою програмування дуже високого рівня. | ||
+ | Цією мовою користувач здійснює управління комп'ютером. Загалом, після входження | ||
+ | в систему користувач починає взаємодіяти з командною оболонкою. Ознакою того, | ||
+ | що оболонка (<b>shell</b>) готова до прийому команд слугує спеціальний символ, | ||
+ | який вона виводить на екран, найчастіше це <b>$</b>. | ||
+ | </p> | ||
+ | <p> | ||
+ | Shell не є необхідною та єдиною командною мовою, але хоча вона стандартизована | ||
+ | в межах POSIX - стандарт мобільних систем. | ||
+ | </p> | ||
+ | <p> | ||
+ | Shell - це одна з багатьох команд Unix. Тобто в набір команд оболонки входить | ||
+ | команда "sh" - виклик інтерпретатора "shell". Перший "shell" викликається | ||
+ | автоматично під час входження в систему і видає на екран промптер. Після цього | ||
+ | можна викликати на виконання будь-які команди, у тому числі і знову "shell", | ||
+ | який створює нову оболонку всередині попередньої. | ||
+ | </p> | ||
+ | <p> | ||
+ | Так наприклад, якщо підготувати в редакторі файл "f1": | ||
+ | <pre class="Code"> | ||
+ | echo Hello! | ||
+ | </pre> | ||
+ | то це буде звичайний текстовий файл, що вміщує команду "echo", яка під час | ||
+ | виконання виводить все, що написане правіше неї на екран. Можна зробити файл "f1" | ||
+ | виконавчим за допомогою команди "chmod 755 f1". Але його можна викликати явно, | ||
+ | використавши виклик інтерпретатора shell: | ||
+ | <pre class="Code"> | ||
+ | sh f1 | ||
+ | </pre> | ||
+ | Файл можна виконати і поточному екземплярі "shell". Для цього існує специфічна | ||
+ | команда ".". | ||
+ | </p> | ||
+ | <p> | ||
+ | <h4>Структура команд.</h4> | ||
+ | </p> | ||
+ | <p> | ||
+ | Команди в <b>shell</b> загалом мають наступний формат: | ||
+ | <pre class="Code"> | ||
+ | <ім'я команди> <прапорці> <аргумент(и)> | ||
+ | </pre> | ||
+ | Наприклад: <b>ls -ls /usr/bin</b> | ||
+ | <table> | ||
+ | <tr> | ||
+ | <td>ls </td><td> ім'я команди виведення вмісту директорії, </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>-ls </td><td> прапорці ("-" - ознака прапорця, l - довгий формат,</td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td></td><td>s - об'єм файлів в блоках), </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> /usr/bin </td><td> директорії, для яких виконується команда. </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | Ця команда виводить на екран в довгому форматі вміст директорії <b>/usr/bin</b>, | ||
+ | при цьому додає інформацію про розмір кожного файлу в блоках. | ||
+ | </p> | ||
+ | <p> | ||
+ | Як правило, перше слово в команді <b>shell</b> сприймає як команду. | ||
+ | </p> | ||
+ | <p> | ||
+ | <h4>Групування команд.</h4> | ||
+ | </p> | ||
+ | <p> | ||
+ | Засоби групування: | ||
+ | <table> | ||
+ | <tr> | ||
+ | <td> ; та #10#13 </td><td> визначають послідовність виконання команд; </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>& </td><td> асинхронне (фонове виконання) попередньої команди; </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>&& </td><td> виконання наступних команд за умови нормального </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td></td><td> завершення попередньої, інакше ігнорувати; </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td>|| </td><td> виконання наступних команд якщо попередня </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> </td><td> завершилася не нормально, інакше ігнорувати.</td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | <p> | ||
+ | Під час виконання команди в асинхронному режимі (після команди стоїть один амперсанд) | ||
+ | на екран виводиться номер процесу, що відповідає виконуваній команді, та система, | ||
+ | запустивши цей фоновий процес, знову виходить в діалог з користувачем. | ||
+ | </p> | ||
+ | <p> | ||
+ | Інколи необхідно, щоб усі фонові процеси завершили свою роботу, перед тим як буде | ||
+ | виконуватися якийсь розрахунок. Для цього слугує команда "wait [PID]". Ця команда | ||
+ | чекає завершення вказаного ідентифікатором фонового процесу. Якщо команда без | ||
+ | параметру, то вона чекає завершення усіх фонових процесів, дочірніх для даного "sh". | ||
+ | </p> | ||
+ | <p> | ||
+ | Для групування команд також можуть використовуватися фігурні "\{\}" та круглі "()" | ||
+ | дужки. | ||
+ | </p> | ||
+ | <p> | ||
+ | Фонові процеси важко знищити, так як традиційна команда "CTL/C" перериває тільки | ||
+ | процеси переднього плану. Для знищення фонового процесу необхідно знати його номер. | ||
+ | Під час запуску фонового \cite{kristian} процесу на екран виводиться число, | ||
+ | що відповідає ідентифікатору цього процесу (PID). Якщо цей номер загублений, | ||
+ | або треба побачити, що процес закінчив свою роботу за допомогою команди: | ||
+ | <b>ps -aux</b>. Знайшовши потрібний PID необхідно використати наступну команду | ||
+ | для знищення процесу: <b>kill -9 [PID]</b>. | ||
+ | </p> | ||
+ | <p> | ||
+ | Круглі дужки "()", крім виконання функцій групування, виконують також функцію | ||
+ | виклику нового екземпляру інтерпретатора <b>shell.</b> | ||
+ | Нехай поточний каталог: "/mnt/lab/asu". Тоді в послідовності команд: <b>cd..; ls; ls</b> | ||
+ | - дві команди "ls" виведуть 2 екземпляра вмісту каталогу "/mnt/lab", а | ||
+ | послідовність <b>(cd ..; ls) ls</b> - виведе спочатку вміст каталогу | ||
+ | "/mnt/lab", а потім вміст "/mnt/lab/asu", таким чином під час входження в дужки | ||
+ | викликається новий екземпляр <b>shell</b>, в межах якого і здійснюється | ||
+ | перехід. Під час виходу із круглих дужок відбувається повернення в старий | ||
+ | <b>shell</b> та в старий каталог. | ||
+ | </p> | ||
+ | <p> | ||
+ | <h4>Генерація імен файлів.</h4> | ||
+ | </p> | ||
+ | <p> | ||
+ | Під час генерації використовують метасимволи: | ||
+ | <table> | ||
+ | <tr> | ||
+ | <td>* </td><td> будь-яка послідовність символів, можливо порожня;</td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td>? </td><td> один будь-який символ; </td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td><b>[</b>. . .<b>]</b> </td><td> будь-який символ, вказаний в дужках перерахуванням </td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td> </td><td> та/або з указанням діапазону;</td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td>cat f* </td><td> виводить усі файли поточного каталогу, імена яких </td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td> </td><td> розпочинаються з "f";</td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td>cat *f* </td><td> виводить усі файли, імена яких містять "f";<td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td>cat </td><td> виводить файли даного каталогу з однобуквенним <td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td> </td><td> розширенням; </td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td>program.? </td><td> видасть файли даного каталогу, що розпочинаються </td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td> </td><td> на program, з однобуквенним розширенням; </td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td>cat <b>[<b>a-b<b>]</b> </td><td> видасть файли, які розпочинаються с "a", "b", "c", "d".</td> | ||
+ | <tr> | ||
+ | <tr> | ||
+ | <td> </td><td> Аналогічно <b>cat [abcd]</b> та <b>cat [bdac]</b>.</td> | ||
+ | <tr> | ||
+ | </table> | ||
+ | </p> | ||
+ | <p> |
Версія за 09:58, 4 квітня 2014
Зміст
Зміст
- Найпростіші засоби Shell.
- Середовище SHELL - змінні та параметри.
- Програмні структури.
Серед операційних систем особливе місце займає Unix. Unix може працювати практично на всіх платформах. Unix - це стандарт де факто відкритих мобільних операційних систем.
Це не тільки багатозадачна операційна система, але й багатокористувацька система. Вона забезпечує сучасний користувацький інтерфейс на базі системи X Window та міжплатформенний зв'язок на базі протоколів TCP/IP і т.д.
ОС Unix створена Кеном Томпсоном та Денісом Рітчі в Bell Laboratories (AT&T).
ОС Unix стоїть на 3-х китах: мова Сі, файлова система, командна мова. Потім додалася система X Window та протоколи TCP/IP.
Мова Сі, на якій написана операційна система Unix, з одного боку, включає в себе властивості мови високого рівня програмування: опис типів, програмні структури if, for, while і т.п., а з іншого боку - включає засоби, що властиві мовам низького рівня програмування, рівня асемблера: регістрові змінні, адресну арифметику, можливості роботи з полями біт та окремими бітами і т.п.
Найпростіші засоби SHELL
Командна мова shell фактично є мовою програмування дуже високого рівня. Цією мовою користувач здійснює управління комп'ютером. Загалом, після входження в систему користувач починає взаємодіяти з командною оболонкою. Ознакою того, що оболонка (shell) готова до прийому команд слугує спеціальний символ, який вона виводить на екран, найчастіше це $.
Shell не є необхідною та єдиною командною мовою, але хоча вона стандартизована в межах POSIX - стандарт мобільних систем.
Shell - це одна з багатьох команд Unix. Тобто в набір команд оболонки входить команда "sh" - виклик інтерпретатора "shell". Перший "shell" викликається автоматично під час входження в систему і видає на екран промптер. Після цього можна викликати на виконання будь-які команди, у тому числі і знову "shell", який створює нову оболонку всередині попередньої.
Так наприклад, якщо підготувати в редакторі файл "f1":
echo Hello!
то це буде звичайний текстовий файл, що вміщує команду "echo", яка під час виконання виводить все, що написане правіше неї на екран. Можна зробити файл "f1" виконавчим за допомогою команди "chmod 755 f1". Але його можна викликати явно, використавши виклик інтерпретатора shell:
sh f1
Файл можна виконати і поточному екземплярі "shell". Для цього існує специфічна команда ".".
Структура команд.
Команди в shell загалом мають наступний формат:
<ім'я команди> <прапорці> <аргумент(и)>
Наприклад: ls -ls /usr/bin
ls | ім'я команди виведення вмісту директорії, |
-ls | прапорці ("-" - ознака прапорця, l - довгий формат, |
s - об'єм файлів в блоках), | |
/usr/bin | директорії, для яких виконується команда. |
Ця команда виводить на екран в довгому форматі вміст директорії /usr/bin, при цьому додає інформацію про розмір кожного файлу в блоках.
Як правило, перше слово в команді shell сприймає як команду.
Групування команд.
Засоби групування:
; та #10#13 | визначають послідовність виконання команд; |
& | асинхронне (фонове виконання) попередньої команди; |
&& | виконання наступних команд за умови нормального |
завершення попередньої, інакше ігнорувати; | |
|| | виконання наступних команд якщо попередня |
завершилася не нормально, інакше ігнорувати. |
<p> Під час виконання команди в асинхронному режимі (після команди стоїть один амперсанд) на екран виводиться номер процесу, що відповідає виконуваній команді, та система, запустивши цей фоновий процес, знову виходить в діалог з користувачем.
Інколи необхідно, щоб усі фонові процеси завершили свою роботу, перед тим як буде виконуватися якийсь розрахунок. Для цього слугує команда "wait [PID]". Ця команда чекає завершення вказаного ідентифікатором фонового процесу. Якщо команда без параметру, то вона чекає завершення усіх фонових процесів, дочірніх для даного "sh".
Для групування команд також можуть використовуватися фігурні "\{\}" та круглі "()" дужки.
Фонові процеси важко знищити, так як традиційна команда "CTL/C" перериває тільки процеси переднього плану. Для знищення фонового процесу необхідно знати його номер. Під час запуску фонового \cite{kristian} процесу на екран виводиться число, що відповідає ідентифікатору цього процесу (PID). Якщо цей номер загублений, або треба побачити, що процес закінчив свою роботу за допомогою команди: ps -aux. Знайшовши потрібний PID необхідно використати наступну команду для знищення процесу: kill -9 [PID].
Круглі дужки "()", крім виконання функцій групування, виконують також функцію виклику нового екземпляру інтерпретатора shell. Нехай поточний каталог: "/mnt/lab/asu". Тоді в послідовності команд: cd..; ls; ls - дві команди "ls" виведуть 2 екземпляра вмісту каталогу "/mnt/lab", а послідовність (cd ..; ls) ls - виведе спочатку вміст каталогу "/mnt/lab", а потім вміст "/mnt/lab/asu", таким чином під час входження в дужки викликається новий екземпляр shell, в межах якого і здійснюється перехід. Під час виходу із круглих дужок відбувається повернення в старий shell та в старий каталог.
Генерація імен файлів.
Під час генерації використовують метасимволи:
* | будь-яка послідовність символів, можливо порожня; | |
? | один будь-який символ; | |
[. . .] | будь-який символ, вказаний в дужках перерахуванням | |
та/або з указанням діапазону; | ||
cat f* | виводить усі файли поточного каталогу, імена яких | |
розпочинаються з "f"; | ||
cat *f* | виводить усі файли, імена яких містять "f"; | |
cat | виводить файли даного каталогу з однобуквенним | |
розширенням; | ||
program.? | видасть файли даного каталогу, що розпочинаються | |
на program, з однобуквенним розширенням; | ||
cat [<b>a-b<b>] | видасть файли, які розпочинаються с "a", "b", "c", "d". | |
Аналогічно cat [abcd] та cat [bdac]. | ||
</p>