LINUX.ORG.RU

История изменений

Исправление CrX, (текущая версия) :

Сам скрипт, так чтобы в keys.txt были просто строки правильных ответов я бы написал как-то так:

#!/bin/sh

# Показать картинку на секунду
show_pic() {
    fim "$1.jpg" &
    jpg_pid=$!
    sleep 1
    kill $jpg_pid
}


sudo apt-get install fim
[ -z $(which fim) ] && exit


echo "Введите названия сигналов"
sleep 1

# счётчик очков, в начале 0
correct=0

for i in $(seq 9); do
    # показываем картинку
    show_pic "$i"

    # берём правильный ответ из файла, с i-той строки, отрезаем ненужные символы перевода строки
    right_answer="$(sed -n ${i}p keys.txt | tr -d '\n' | tr -d '\r')"

    # запрашиваем ответ юзера
    read answer

    # если совпадает, начисляем очко
    [ "$answer" = "$right_answer" ] && correct=$(($correct+1))
done

echo "Вы дали $correct правильных ответов"

А вот для парсинга квази-регэкспов придётся написать ещё с десяток строк. Если заменить на настоящие регэкспы, можно будет обойтись grep или sed.

P.S. | tr -d '\n' | tr -d '\r' добавлено исключительно из-за того, что у тебя keys.txt почему-то в \r\n (DOS) формате. Если перевести в человеческий (dos2unix keys.txt), то эта часть не требуется.

Исправление CrX, :

Сам скрипт, так чтобы в keys.txt были просто строки правильных ответов я бы написал как-то так:

#!/bin/sh

# Показать картинку на секунду
show_pic() {
    fim "$1.jpg" &
    jpg_pid=$!
    sleep 1
    kill $jpg_pid
}


sudo apt-get install fim
[ -z $(which fim) ] && exit


echo "Введите названия сигналов"
sleep 1

# счётчик очков, в начале 0
correct=0

for i in $(seq 9); do
    # показываем картинку
    show_pic "$i"

    # берём правильный ответ из файла, с i-той строки, отрезаем ненужные символы перевода строки
    right_answer="$(sed -n ${i}p keys.txt | tr -d '\n' | tr -d '\r')"

    # запрашиваем ответ юзера
    read answer

    # если совпадает, начисляем очко
    [ "$answer" = "$right_answer" ] && correct=$(($correct+1))
done

echo "Вы дали $correct правильных ответов"

А вот для парсинга квази-регэкспов придётся написать ещё с десяток строк. Если заменить на настоящие регэкспы, можно будет обойтись grep или sed.

Исправление CrX, :

Сам скрипт, так чтобы в keys.txt были просто строки правильных ответов я бы написал как-то так:

#!/bin/sh

# Показать картинку на секунду
show_pic() {
    fim "$1.jpg" &
    jpg_pid=$!
    sleep 1
    kill $jpg_pid
}


sudo apt-get install fim
[ -z $(which fim) ] && exit


echo "Введите названия сигналов"
sleep 1

# счётчик очков, в начале 0
correct=0

for i in $(seq 9); do
    # показываем картинку
    show_pic "$i"

    # берём правильный ответ из файла, с i-той строки, отрезаем ненужные символы перевода строки
    right_answer="$(sed -n ${i}p keys.txt | tr -d '\n' | tr -d '\r')"

    # запрашиваем ответ юзера
    read answer

    # если совпадает, начисляем очко
    [ "$answer" = "$right_answer" ] && correct=$(($correct+1))
done

echo "Вы дали $correct правильных ответов"

Исправление CrX, :

Сам скрипт, так чтобы в keys.txt были просто строки правильных ответов я бы написал как-то так:

#!/bin/sh

# Показать картинку на секунду
show_pic() {
    fim "$1.jpg" &
    jpg_pid=$!
    sleep 1
    kill $jpg_pid
}


sudo apt-get install fim
[ -z $(which fim) ] && exit


echo "Введите названия сигналов"
sleep 1

# счётчик очков, в начале 0
correct=0

for i in $(seq 9); do
    # показываем картинку
    show_pic "$i"

    # берём правильный ответ из файла, с i-той строки, отрезаем ненужные символы перевода строки
    right_answer="$(sed -n ${i}p keys.txt | tr -d '\n' | tr -d '\r')"

    # запрашиваем ответ юзера
    read answer

    # если совпадает, начисляем очко
    [ "$answer" = "$right_answer" ] && correct=$(($correct+1))

done
echo "Вы дали $correct правильных ответов"

Исправление CrX, :

Сам скрипт, так чтобы в keys.txt были просто строки правильных ответов я бы написал как-то так:

#!/bin/sh

show_pic() {
    fim "$1.jpg" &
    jpg_pid=$!
    sleep 1
    kill $jpg_pid
}


sudo apt-get install fim
[ -z $(which fim) ] && exit


echo "Введите названия сигналов"
sleep 1

correct=0

for i in $(seq 9); do
    show_pic "$i"

    right_answer="$(sed -n ${i}p keys.txt | tr -d '\n' | tr -d '\r')"
    read answer

    [ "$answer" = "$right_answer" ] && correct=$(($correct+1))

done
echo "Вы дали $correct правильных ответов"

Исходная версия CrX, :

Сам скрипт, так чтобы в keys.txt были просто строки правильных ответов я бы написал как-то так:

#!/bin/sh

show_pic() {
    fim "$1.jpg" &
    jpg_pid=$!
    sleep 1
    kill $jpg_pid
}


sudo apt-get install fim
[ -z $(which fim) ] && exit


echo "Введите названия сигналов"
sleep 1

correct=0

for i in $(seq 9); do
    show_pic "$i"

    right_answer="$(sed -n ${i}p keys.txt | tr -d '\n' | tr -d '\r')"
    read answer

    [ "$answer" = "$right_answer" ] && correct=$(($correct+1))

done
echo "Вы дали $correct правильных ответов"