Скрипты-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 PID - идентификатор процесса, который можно посмотреть в команде ps или top

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

Практика

  1. Рекурсивный подсчет факториала
  2. Рекурсивный подсчет факториала с возможностью получения результата более 255.
  3. Крестики-нолики с управлением от курсора для двух игроков.
    Рисуется поле, опрашивается клавиатура, ставится соответствующий ходу символ и проверяется, кто выиграл.
Written on October 10, 2016