Шелл
- параметры команд; идея; традиции (old UNIX vs GNU)
- преобразования строк: использование echo; ограничения echo
ещё про преобразования строк: aka $()
- ещё раз про абсолютные и относительные пути
- инициализация шелла
- скрипты в UNIX: #!
- переменные: обычные; экспортируемые; автоматические (*, @, #, ?, !); настройки (HISTCONTROL, HISTFILESIZE, HISTSIZE, IFS, PATH, PS1)
- while, for, if, case
- test, seq, bash-only: {}
- трюк на тему простого разбора аргументов
Упражнения
Выполните команды и посмотрите, что получается: {echo *; echo *.txt; echo {1..10}; echo `ls`; y=abcabcabc; x="`echo $y | sed 's/a/b/g'`"}
- Напишите скрипт vecho.sh, который распечатывает свои аргументы по одному на строку, в кавычках. (Полезное: почитайте help printf).
- Сделайте для себя осмысленные ~/.bashrc и ~/.profile: добавьте ~/bin в путь, установите осмысленные значения для HISTCONTROL, HISTSIZE, HISTFILESIZE, PS1; если вы администратор, поредактируйте /etc/bash.bashrc и /etc/profile (в них есть несколько полезных штук, которые можно включить / выключить)
- Напишите скрипт fix_spaces.sh, который заменяет пробелы на _ в именах файлов
- Напишите скрипт yesno (лучше без расширения sh и положите к себе в путь), который будет получать на вход текст вопроса и ответ по умолчанию (y, n или ничего), и требовать от пользователя ответа y или n. Если пользователь ответил y (или умолчание было y и пользователь ничего не ответил), скрипт выходит с кодом ошибки 0, если ответ был n, то с кодом ошибки 1.
- Напишите скрипт doit, который получает на вход команду и её аргументы, распечатывает на стандартный поток ошибок дату и название команды, и выполняет её (замещая процесс шелла)
- Напишите скрипт say, который получает на вход текст и пишет его на стандартный поток ошибок (аналог встроенной команды echo)