Слайд 1Занятие 11
МДК.02.01 Программное обеспечение компьютерных сетей
3-курс
Слайд 5Элементы языка shell
Другими, очень мощными средствами командного интерпретатора shell
являются фильтры и конвейеры команд (программные каналы, pipes).
Фильтрами называются
программы или команды, которые выполняют чтение со стандартного ввода и записывают результат в стандартный вывод.
Многие команды операционной системы UNIX реализованы в виде фильтров.
Фильтры допускают объединение, используя механизм конвейеризации, позволяющий объединять стандартный вывод одной команды со стандартным вводом другой.
Слайд 6Элементы языка shell
Оператор, реализующий механизм программных каналов, обозначается вертикальной
чертой |.
Командную строку, состоящую из нескольких команд (программ), работающих
в конвейере, можно представить следующим образом:
программа1 | программа2 | программаЗ...
Первая команда конвейера создает поток выходных данных, принимаемых на входе программы2.
программа2, в свою очередь, создает выходной поток для программыЗ и т. д.
Слайд 7Элементы языка shell
Вернемся к функционированию программных каналов в интерпретаторе
shell.
Пусть требуется определить количество файлов, содержащихся в
текущем каталоге.
Если использовать переназначение ввода/вывода, то данная задача решается посредством двух команд:
# ls -l > list_files
# wc -l < list_files
Здесь используются операторы > и < переназначения ввода/вывода, а промежуточный результат хранится в файле list_files.
Команда wc -l считает количество строк в документе.
Слайд 8Элементы языка shell
Также операция с использованием программного канала решается
одной командой:
# ls -l | wc -l
Нужно
четко представлять себе, когда лучше использовать переназначение ввода/вывода, а когда конвейер команд.
Оптимальное сочетание того и другого механизмов позволяет реализовать довольно сложные и эффективные алгоритмы обработки данных.
Так, например, если необходимо сохранить список файлов, имена которых начинаются с "text", то это можно сделать одной командой:
# ls -l | grep text > text_files
Слайд 9Элементы языка shell
Командный интерпретатор shell, подобно языкам высокого уровня,
использует переменные.
Имя переменной должно начинаться с буквы или с
символа подчеркивания, не должно содержать пробел, например:
string_1
_InputVal
Слайд 10Элементы языка shell
Имена переменных наподобные:
7n
my var
.var1
использовать
нельзя.
Имя 7n начинается с цифры,
my var содержит пробел,
а .var1 — недопустимый символ точки.
Слайд 11Элементы языка shell
Переменным можно присвоить определенные значения с помощью
оператора присваивания =:
string_1="String 1"
Var1=1
Здесь переменной string_1 присвоена
строка символов "String 1", а переменной Var1 — значение 1.
Обратите внимание на то, что строковое значение заключается в кавычки.
Слайд 12Элементы языка shell
В отличие от языков программирования высокого уровня,
таких, например, как С («си»), переменные командного интерпретатора shell
не связаны с определенным типом данных, поэтому любое присвоенное им значение интерпретируется как строка символов.
Для доступа к переменной нужно непосредственно перед ее именем установить знак доллара $.
Следующий пример демонстрирует вывод содержимого переменной myvar на экран:
# myvar=10
# echo $myvar
10
Слайд 13Элементы языка shell
Точно так же на экране отображается и
строковое значение, присвоенное переменной:
# message="String"
# echo $message
String
Везде, где встречается символ $, предшествующий имени переменной, он заменяется ее значением, например:
# myvar=100
# echo myvar = $myvar
myvar = 100
Слайд 14Элементы языка shell
Если имя переменной заключить в фигурные скобки,
то отображаемое значение будет содержать символы (если есть), находящиеся за
фигурными скобками, например:
# myvar="String"
# echo ${myvar}100
String100
Важное замечание: при записи операции присваивания переменная, оператор = и присваиваемое значение должны быть записаны без пробелов.
Слайд 15Элементы языка shell
Переменной может быть присвоен результат выполнения команды,
для чего используются обратные апострофы, например:
# DATE=`date`
Здесь переменная
DATE получает результат вывода команды date.
Слайд 16Элементы языка shell
Если команда заключена в обратные апострофы, то
интерпретатор обязательно выполнит ее, поместив результат на то место в
командной строке, где эта команда указана:
# users=`who | wc –l`
# echo $users users logged in.
3 users logged in.
Слайд 17Элементы языка shell
Для работы со строками, файлами и каталогами
в интерпретаторе shell очень часто используются специальные символы (метасимволы):
•
* — произвольная последовательность символов, может не содержать ни одного символа;
• ? — один произвольный символ;
• [... ] — любой из символов в указанном диапазоне, либо указанный в перечислении.
Слайд 18Элементы языка shell
Например, команда:
# ls -l r*
отображает все файлы каталога, начинающиеся с литеры r.
Команда:
# ls -l *rt*
отображает на консоли все файлы, содержащие в имени rt. Команда:
# ls -l t.???
выводит файлы текущего каталога, начинающиеся с литеры t и имеющие 3-буквенные расширения, например, tx.doc и tx.out.
Слайд 19Элементы языка shell
Команда:
# ls -l [a-d]*
выводит на экран
список файлов, начинающихся с а, b, с, d.
Аналогичный результат
можно получить с помощью одной из команд:
# cat [abed]*
# cat [bdac]*
Слайд 20Элементы языка shell
Символ * можно использовать и самостоятельно.
Например,
команда:
# echo *
отображает имена всех файлов текущего каталога на
экране.
Слайд 21Элементы языка shell
Кроме перечисленных метасимволов, командный интерпретатор shell использует
еще несколько символов, имеющих специальное назначение:
• двойные кавычки ";
• апостроф ‘;
• символ обратной наклонной черты \.
Слайд 22Элементы языка shell
Предположим, что текущий каталог содержит файлы data1,
prog1 и text1.
Введем две команды echo, аргументы которых содержат
*, и сравним результаты выполнения:
# echo *
data1 prog1 text1
# echo "*"
*
В первом случае интерпретатор shell воспринимает * как список содержимого текущего каталога и отображает список файлов, а во втором двойные кавычки отменяют значение символа *.
Слайд 23Элементы языка shell
В этом и заключается смысл использования двойных
кавычек.
Любой символ, имеющий специальное значение (например, *, ?, >, >>
, || ), утрачивает свой специальный статус.
Исключениями из этих случаев являются:
- символ $,
- обратный апостроф (`),
- обратный слэш (\),
если они предшествуют специальному символу.
Слайд 24Элементы языка shell
Смысл одиночных апострофов демонстрирует следующая команда:
#
echo '$text'
$text
Как это следует
из результата, если переменная заключена в апострофы, то ее значение не подставляется при вычислении выражения.
Слайд 25Элементы языка shell
Разницу между двойными кавычками, апострофами и их
отсутствием можно увидеть, выполнив следующие команды:
# echo *
data1
prog1 text1
# echo * "*" '*'
data1 prog1 text1 * *
# var1=test
# echo $var1 "$var1" '$var1'
test test $var1
#
Слайд 26Элементы языка shell
Обратная наклонная черта перед
символом ликвидирует его специальное значение:
#
echo \$text
$text
# echo \\
\
Слайд 27Элементы языка shell
Кратко рассмотрим смысл основных системных переменных: •
PATH — указывает, в
каких каталогах искать выполняемые файлы;
• НОМЕ — это путь к домашнему каталогу пользователя;
• MAIL — имя файла электронной почты пользователя;
• SHELL — указывает оболочку, в которой работает пользователь.
Слайд 28Элементы языка shell
Эти переменные можно использовать в выражениях и
командах интерпретатора shell обычным образом, так же, как и другие
переменные.
Большинство командных интерпретаторов в общем случае не предназначены для выполнения сложных математических вычислений, хотя имеют встроенные средства для арифметических операций.
Приятным исключением является командная оболочка bash, в которой весьма существенно расширены возможности по обработке математических величин.
Слайд 29Элементы языка shell
Например, командный интерпретатор выполняет приведенные далее операции
следующим образом:
# n=0
# n=$n+1
# echo $n
0+1
Арифметические операции, которые можно выполнить в shell, мы рассмотрим далее при анализе командных файлов.
Слайд 30Вспомним некоторые команды
su — выполняет команду с заменой идентификатора пользователя
и группы; su (Set UID) – утилита командной строки, которая
позволяет вам временно стать другим пользователем (изменить "владельца" текущего сеанса) без необходимости завершать сеанс и открывать новый.
Если имя временного пользователя не указано, то им становится суперпользователь root.
Если при этом использовать опцию –l, то получим доступ к переменным окружения администратора в полном объеме.
При этом текущий каталог, в котором была отдана команда, сменится на домашний каталог пользователя root.
Слайд 31Вспомним некоторые команды
Например, для смены текущего пользователя на alex, введём
команду:
$ su alex
Password:
[*****]$
При этом надо знать пароль пользователя alex.
Для
выхода из команды su , то есть вернуться к первоначальному пользователю, можно множеством различных способов, например, можно набрать в командной строке exit и нажать ENTER:
$ exit
нажать клавишу < ENTER >.
Слайд 32Вспомним некоторые команды
Для смены владельца на супепользователя root выполним команду:
$ su –l root
Password:
[********]#
При этом необходимо знать пароль супепользователя root.
Суперпользователь
может создать нового пользователя, назначить ему пароль и выйти из команды su, набрать в командной строке exit и нажать ENTER:
# exit
нажать клавишу < ENTER >.
Слайд 33Контрольные вопросы
1. Пользуясь командой su сменить пользователя на root.
2. Создать
нового пользователя.
3. Назначить ему пароль.
4. Создать дополнительную группу.
5. Добавить
нового пользователя в созданную группу.
6. Выйти из программы su.
Слайд 34Список литературы:
Unix и Linux: руководство системного администратора, 4-е издание, 2012,
Э. Немет, Г. Снайдер, Т. Хейн, Б. Уэйли
Для начинающих работать
в UNIX, Ф.И. Торчинский.
Организация UNIX систем и ОС Solaris 9, Торчинский Ф.И., 2-е издание, исправленное, 2016.
Слайд 35Благодарю за внимание!
Преподаватель: Солодухин Андрей Геннадьевич
Электронная почта: asoloduhin@kait20.ru