Скрипты-II
Скрипты
Функции
#!/bin/bash
func()
{
echo $[$1 + $2]
}
func 10 100
#!/bin/bash
multiply_by_2()
{
return $[$1 * 2]
}
multiply_by_2 11
echo $?
Вернуть можно только число 0..255.
Сигналы и их перехват в скриптах
Сигналы - события, которые ядро передает программам.
SIGKILL (9) - шлем для убийства программы
SIGTERM (15) - “мягкая” просьба самоубиться
SIGINT (2) - ctrl+C, прерывание с клавиатуры
SIGHUP (1) - сигнал, обычно используемый
для того, чтобы заставить программу перечитать
свои конфиг. файлы.
Перехват сигнала: ``` #!/bin/bash
sig_int_handler() { echo CTRL+C pressed! }
trap sig_int_handler 2 while true do done ```
kill - команда для посылки сигналов
kill -9
CTRL+Z - остановить программу и отправить
её в background
bg - запуск такой программы в фоновом режиме
fg - запуск такой программы с захватом
консоли
kill %1 - убить такую программу
Запуск команды в фоновом режиме из консоли:
find / -name '*.txt' &
SIGCONT - сигнал, который шлется при
возобновлении
SIGSTOP - при остановке
Управляющие коды терминала
Цвет
0x1B - 27 - код начала управляющей последовательности
echo -e ‘\x1B[36m;’ 3x - цвет текста 4x - цвет фона
Вывод Hello красным цветом
echo -e '\x1B[36m'Hello
Красным по голубому с выключением в конце
echo -e '\x1B[36;41m'Hello'\x1B[0m'
Вместо \x1B можно писать \E.
Команда изменения позиции курсора H:
echo -e '\E[0;0H'123
(вывод 123 в левый верхний угол (0,0))
clear - команда для очистки экрана.
Управление от курсора
Пример опроса кнопок вверх-вниз:
#!/bin/bash
read -s -n1 code
if [ "$code" == $'\x1B' ]
then
read -s -n2 cursor
case "$cursor" in
"[A" )
echo Cursor up
;;
"[B" )
echo Cursor down
;;
esac
fi
Практика
- Рекурсивный подсчет факториала
- Рекурсивный подсчет факториала с возможностью получения результата более 255.
- Крестики-нолики с управлением от курсора
для двух игроков.
Рисуется поле, опрашивается клавиатура, ставится соответствующий ходу символ и проверяется, кто выиграл.
