Skip to content

Instantly share code, notes, and snippets.

@nngogol
Created April 27, 2020 12:51
Show Gist options
  • Save nngogol/6b23ab283e09bf4a6e638f0ac33c988f to your computer and use it in GitHub Desktop.
Save nngogol/6b23ab283e09bf4a6e638f0ac33c988f to your computer and use it in GitHub Desktop.
Скрипт-тест консольного ввода
#!/bin/bash
#
# ------------------------------------------------------
# [ Дата создания: 2020-04-27 15:47:03
# [ Название файла: test_my_keyboard_input.sh
# [ Название: Скрипт для теста консольный приложений
# [ Автор: nngogol
# ------------------------------------------------------
#
# Интерфейс:
# $ bash test_my_keyboard_input.sh
#
# Суть скрипта:
# 1) запустить некие вычисления в bg¹
# 2) реагировать на нажатие клавиш пользователя (stdin),
# показывая ему сообщения (stdout)
#
#
#
# ! Обрати внимание !
# Заметка 1:
# counterUp - это переменная-счетчик,
# который инкрементируемся каждые sleep_time секунд
# Заметка 2:
# Замечательная команда:
# $ read -a ch -N 1 -t $sleep_time -s
#
# -a ch -t $sleep_time -N 1
# делает счение в переменную ch, спит sleep_time, и читает только один символ
#
#
#
#
#
# P.S.
# ¹ - bg == background
max_lvl=$1
max_lvl=${max_lvl:=100} # если $1 не передан, то пусть будет 100
counterUp=0
sleep_time=0.1
ch=
echo Starting process
while [ 1 ]; do
# main part:
read -a ch -N 1 -t $sleep_time -s
counterUp=$(( counterUp + 1 ))
# Причина остановить: счетик
[[ "$max_lvl" == "$counterUp" ]] && break
# Реакция
if [[ "$ch" == "q" ]]; then
echo stop && break
elif [[ "$ch" == "s" ]]; then
echo status:
echo "currenty : $counterUp"
echo "max level: $max_lvl"
echo ' ----------'
echo "IN PROCESS $(( 100 * $counterUp / $max_lvl ))%"
echo
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment