15. Язык Shell
Shell
Существует 2 режима работы:
1)Пакетный режим - при ошибке выполнение завершается.
2)Интерактивный - во время ошибки не завершает работу и предлагает пользователю ввести команду
Этапы обработки строки интерпретатором
Механизмы экранирования:
Мягкое экранирование " "
Жесткое экранирование ' '
Этапы выполнения:
1)$ подстановка значения переменной
Для изменения переменной окружения или создания используется команда export
Специальные параметры языка С:
? код завершения программы
* последовательность значений всех позиционных параметров начиная с 1, как одно значение
# количество позиционных параметров
@ последовательность всех значений последовательности позиционых параметров, но при подстановке поледовательность рассматривается как множество
2)alias замена команды другой командой
3)Подстановка вывода команды:
$(<команда>)
если присвоить результат переменной то он разобьется на несколько обьектов вычисляя промежутки и удаляя пустые, обозночения промежутков берется из переменной IFS
5)Подстановка имен файлов: каждое слово в командной строке анализируется на мета символы, если хотябы один найден то слово заменяется на лексиграфически упорядоченной последовательностью найденых имен файлов разделенными пробелами.
* любая последовательность символов
? любой одиночный символ
[<символы>] любой символ из последовательности
6) Удаление экранирующих символов
15. Группировка комманд
Отдельные команды могут быть сгруппированы конвейером "|", стандартный вывод переправляется на стандартный ввод следующей команды.
&& - последовательный запуск команд если предыдущая завершилась успешно
; - последовательный запуск команд
& - асинхронный запуск команды
|| - выполнение команд если предыдущий с кодом завершения не 0 (неудача)
Оператор цикла с перечислением
for <name> [in <list>]
do
<oper>
done
Переменная принимает последовательность слов из списка и для каждого выполняет цикл, если списка нет то берутся значения позиционных параметров.
case <name> in
<tample>) <oper>;;
esac
elif <list com>
then <list com>
else <list com>
fi
cut разбивка файла на поля:
-с (список) (файл)...
-f столбец
paste - слияние строк файла
tr -транслитерация, замена символов, удаление символов
grep - поиск по регулярному выражению
fgrep - упрощенный аналог, поиск подстроки, можно указать конкретный файл с образцами строк для поиска
egrep - поиск по шаблонам которые можно поместить в файл, можно регулярное выражение задавать списком как опции
se56d - пакетный редактор файлов или фильтр для вывода. Указываются набор строк, например номера, затем задается код команды и ее аргументы. Команды: a\ <text> , i\ <text>, c\ <text>, d\, p\, q\, r <file> - вставляем строчки из файла,w <file> записываем строчки в файл.
16. Средства разработки программ.
Этапы программирования на С:
1) исх. модуль производят предпроцессинг
2)компиляция в .асс
3)это собирается в исходный модуль
4)компонуется исполняемый модуль в процессе которого подсоединяются коды библиотек.
Библиотеки по умолчанию находятся в /usr/include, при желании можно указать конкретный каталог в директиве #include
при сборке флагом -l можно указать доп. библиотеки.
Статические библиотеки создаются с помощью ar.
Динамические библиотеки создаются компановщиком с помощью ключа shared, для использования получившейся библиотеки ее необходимо скопировать в usr/local/lib после чего в etc/id.so.conf нужно определить нахождение библиотек, после изменения состава библиотек необходимо запустить утилиту ldconfig
Утилита make
Отслеживает изменения в файлах проекта и компанует только те что изменились или зависят от изменений, структура проетка описывается в файле makefile
Синтаксис
<список целевых файлов>:<список зависимых файлов>;[команда]
Анализируются зависимости и при модификации файлов происходит выполнение команд
В этом файле допускаются макросы
<имя>=<значение>
Указываются метки например make install выполнит с метки install
Сценарий ./configure делает диагностику, докачивает пакеты и формирует make файл
setpgrp() - создание новой группы
setsid() - создание нового сеанса, для создания фонового процессора.
Демон создает .pid через который можно узнать ид процесса, т.е. мы должны всегда создавать его для фоновых процессов.