Терминал — измеряем скорость работы на клавиатуре

от автора

Существуют готовые решения для измерения скорости работы на клавиатуре, например typespeed. Прекрасная программа с различными опциями.

Потренировал на ней пальцы и возникла идея написать что-нибудь попроще. Расскажу, каким путём шёл и что получилось.

1. Формула. Тут всё просто.

Скорость = Количество_символов / Время_печати

2. Количество символов

Как измерить количество вводимых символов? Были разные идеи. Например, направить в файл, и потом измерять что в файле накопилось.

Но решил сделать проще — пусть вводимый текст станет именем переменной. А потом уже измерить количество символов в имени.

3. Время_печати = Время_окончания — Время_начала

Использовал время юникс в секундах.

4. Перевод из секунд в минуты.

Чтобы получить «символы в минуту», умножил конечный результат на 60.

5. Особенности реализации

Проблема возникла при делении Количество_символов / Время_печати.

Засада — правый слэш делит без остатка!!

При скорости печати менее 60 символов в минуту результат получается 0.

Решил так — чтобы вытащить остаток на ясно солнышко, количество символов умножил на 100, а потом в конечной формуле сделал деление на 100.

Прилагаю текст. Буду рад услышать замечания, пожелания!

А тут ссылка на GitHub.

#!/bin/bashechoecho » ИЗМЕРЕНИЕ СКОРОСТИ ПЕЧАТИ НА КЛАВИАТУРЕ»echoecho » Нажмите Пробел и напечатайте любую фразу.»echo » Затем для завершения нажмите Enter.»echo# Первый введенный символ — сигнал для начала отсчета времениread -p » » -n 1# Время началаtime1=$(date +%s)# Ввод текстаread -p » » text# Время окончанияtime2=$(date +%s)# Подсчет количества символовquantity=${#text}# Умножаем на 100quantity100=$(($quantity*100))# Вычисляем длительность времени печатиtimedif=$(($time2-$time1))# Промежуточное вычисление скорости печатиspeed100=$(($quantity100 / $timedif))# Скорость печати символов в минутуspeed_minutes=$(($speed100 * 60 / 100))echoecho » Скорость, симв/мин.: $speed_minutes»echo

ссылка на оригинал статьи https://habr.com/ru/articles/1052904/