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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии (6)


  1. AnSa8
    28.06.2026 19:44

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

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

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

    Для перевода из секунд в минуты обычно делят, а не умножают.


    1. Solmik Автор
      28.06.2026 19:44

      Благодарю, внес поправку в текст статьи:

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

      Программу трогать не стал, тут по логике надо умножить.

      Наглядный пример - допустим, у нас скорость два символа в секунду. Сколько символов получится напечатать в минуту ( за 60 секунд ) ?

      Умножаем 2 х 60 = 120 символов в минуту.


  1. dmitrytheman
    28.06.2026 19:44

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

    echo "scale=2; $quantity/$timedif" | bc


    1. Solmik Автор
      28.06.2026 19:44

      Благодарю! Да, вполне возможный вариант!

      Я постарался упростить, не подключать калькулятор.


  1. Uranic2
    28.06.2026 19:44

    :) Скорость набора текста - один из самых лукавых показателей.

    1. Она сильно зависит от сложности текста (Одно дело набирать знакомые слова в нижнем регистре и совсем другое со всеми знаками препинания, да ещё и с скобками, кавычками)

    2. Скорость сильно зависит от длины текста. т.е. на отрезках в 15 секунд и 5 минут разница будет в разы.

    3. Ваш рекорд в наборе текста вовсе не значит, что вы с такой скоростью и будете набирать текст во время работы.


    1. Solmik Автор
      28.06.2026 19:44

      Да, согласен! Скажу больше - скорость печати в жизни вообще не имеет большого значения. Важен автоматизм в работе рук, чтобы голова не отвлекалась на клавиатуру. А скорость должна быть комфортной.

      Я обучаю студентов работать на клавиатуре, если заинтересовались - посмотрите статью на эту тему.

      https://habr.com/ru/articles/1024642/