Говорите на BASH: различия между версиями

7879 байт убрано ,  12 лет назад
Содержимое страницы заменено на «<big> <center>Говорите с компьютером на понятном ему языке!</big></center> {{материалы...»
(Содержимое страницы заменено на «<big> <center>Говорите с компьютером на понятном ему языке!</big></center> {{материалы...»)
<big> <center>Говорите с компьютером на понятном ему языке<ref>Под управлением UNIX-подобных ОС</ref>!</big></center>
 
{{материалы|кафедры|Программирование}}
 
'''Цель''' данного курса - быстро и безболезненно научиться основам использования семейства командных оболочен *SH, созданных в рамках проекта GNU.
'''Метод''' - сравнительный
'''Рекомендуется''' при освоении курса запускать команды в терминале вашего компьютера ('''Не''' запускайте их с правами суперпользователя).
==Предисловие==
В общем виде команда состоит из имени программы, параметров и аргументов.
{| class="tiles" style="text-align:center"
|colspan="7"|<center><big> rm -ri /home/user/anime </center></big>
|-
| '''rm'''|| '''-ri''' || '''"/home/user/anime"'''
|-
| имя программы<br/>для удаления || параметры || аргумент
|-
|colspan="7"|'''Назначение''':Удалить каталог, требуя подтверждение перед удалением <br/> каждого файла
|-
|}
==Перенаправления==
Пренаправление потоков - мощный инструмент, который позволяет организовывать взаимодействие разных программ. Это - важнейший элемент [[w:ru:Философия UNIX|философии UNIX]]. Приведённый ниже пример сотоит из двух частей - командо до перенаправления (">>") и после. Попробуйте выполнить команду cat /dev/urandom саму по себе и вы увидите как по экрану "поползут крякозаблики" (нажмите Ctrl+C для остановки). Командой ">>" эти "крякозяблики" отправятся на вход звуковой карты. ( Услышите ли Вы звук зависит от конфигурации системы.)
{| class="tiles" style="text-align:center"
|colspan="7"|<center><big> cat /dev/urandom >> /dev/dsp </center></big>
|-
| '''cat'''|| '''/dev/urandom''' || '''">>"''' || '''/dev/dsp'''
|-
| вывести содержимое <br /> файла в стандартный <br/> вывод ||генератор <br/> псевдослучайных<br/>символов|| перенаправить вывод<br/> в файл|| файл звуковой<br/> карты
|-
|colspan="7"|'''Назначение''':Быстро проверить работоспособность звуковой карты
|-
|}
 
Здесь используется "конвейер" - символ ("|"). Он перенаправляет [[w:ru:стандартный вывод|стандартный вывод]] одной программы на [[w:ru:стандартный ввод|стандартный ввод]] другой программы.
{| class="tiles" style="text-align:center"
|colspan="7"|<center><big> man useradd | grep -i -- -e </center></big>
|-
| '''man''' || '''useradd''' || '''"конвейер"''' || '''grep''' || ''' -i''' || '''--''' || '''-e'''
|-
| вызвать справку ||для программы useradd || перенаправить вывод<br/> на ввод фильтра|| фильтр ||не учитывать<br/> регистр ||конец <br/>списка опций ||что ищем
|-
|colspan="7"|'''Назначение''':Быстро проверить назначение опции
|-
|}
 
 
{| class="tiles" style="text-align:center"
|colspan="9"|<center><big> for FILE in *.md5;do md5sum -c $FILE;done</center></big>
|-
| '''for'''|| '''FILE''' || '''"in "''' || '''*.md5''' || '''do''' || '''md5sum''' || '''-c''' || '''$FILE;''' || '''done'''
|-
| Управляющий <br/>элемент || Помещаем имя<br/> в переменную || Управляющий <br/>элемент ||маска<br/>файла|| Управляющий <br/>элемент|| программа для работы<br/> с md5-хешами ||опция <br/> проверки|| подставляем имя <br/> файла ||Управляющий <br/>элемент
|-
|colspan="9"|'''Назначение''':Проверить md5-хеши всех пакетов в каталоге (для который есть файл с хешем)
|-
|}
==Золотое правило==
 
Существует не менее двух способов сделать что-то. Следующие команды выполняют одну и ту же операцию распаковывают все targz- архивы(тарболлы) в текущем каталоге.
{{Врезка
|Содержание =В терминологии командных оболочек UNIX, командами одинаково называются и встроенные команды, и сторонние программы. Это объясняется тем, что в UNIX- подобных ОС программы вызываются по имени. Хотя подобное смешение может вызвать поначалу некоторую путаницу, на самом деле представляет собой большое удобство.
|Заголовок =Команда или программа?
|Выравнивание =right
|Ширина = 300px
}}
{| class="tiles" style="text-align:center"
|colspan="9"|<center><big> for FILE in *.tar.gz;do tar -xzf $FILE;done</center></big>
|}
{| class="tiles" style="text-align:center"
|colspan="9"|<center><big> ls -f `pwd` | grep gz | xargs tar -xzf '{}'</center></big>
|}
{| class="tiles" style="text-align:center"
|colspan="9"|<center><big> for FILE in *.tar.gz;do unzip $FILE | tar -xf -;done</center></big>
|}
{| class="tiles" style="text-align:center"
|colspan="9"|<center><big> find . -maxdepth 1 -type f | xargs tar -xzf '{}'</center></big>
|}
{| class="tiles" style="text-align:center"
|colspan="9"|<center><big> find . -maxdepth 1 -type f -name '*.tar.gz' -exec tar -xzf '{}' \;</center></big>
|}
 
==Фильтр==
Одна из полезнейших программ. Вместе с механизмом перенаправления позволяет очень легко осуществлять нетривиальную обработку информации. Сравните два примера.
{| class="tiles" style="text-align:center"
|colspan="9"|<center><big> for FILE in *.md5;do md5sum -c $FILE;done</center></big>
|}
{| class="tiles" style="text-align:center"
|colspan="9"|<center><big> for FILE in *.md5;do md5sum -c $FILE;done | grep -v OK </center></big>
|}
grep, как мы уже знаем, - это фильтр. Опция -v инвертирует условие поиска (шаблон), "OK" - наш шаблон. Что выведет на экран вторая команда?
 
 
==Задания для отработки материала==
 
<quiz display=simple>
{Команда mount, вызванная без аргументов, выводит на экран список отмонтированных устройств. Напишите команду, выводящую только устройства, отмонтированные в каталог /media.
|type="{}"}
{ mount | grep /media _25}
 
{Напишите команду, выводящую список всех отмонтированных устройств в файл mounted.list
|type="{}"}
{ mount > mounted.list _25}
</quiz>
 
== Примечания ==
{{примечания}}
[[Категория:Командные оболочки UNIX]]
376

правок