Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Тренировка английского. Словарь и скрипт для отработки навыков  (Прочитано 1456 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн artemu88

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
Всем привет!
Решил выложить небольшие свои наработки для изучающих английский язык.
1. скрипт для создания словаря (навеяно этой темой и статьей)
#!/usr/bin/bash
eng=$(xsel -o)
rus=$(trans :ru -no-ansi -b "${eng}")

echo "${eng}:${rus}" >> dictionary.log
скрипт создает в той же папке, где и находится файл со словарем == разделитель == :
Работает так:
- прописываем сочетание клавиш для скрипта
- выделяем английский текст
- нажимаем сочетание клавиш, и скрипт заполняет словарь

2. скрипт для отработки слов (первый параметр == файл со словарем (или любой другой в формате engWord:rusWord, где : - это разделитель (может быть и любой другой), второй параметр == разделитель)
например для этого файла, где разделитель :, запуск скрипта будет выглядеть так:
./scriptName /path/to/dictionary.log \:#!/usr/bin/bash
OLD_IFS=$IFS
IFS=$'\n'
declare -a errors_array
j=0

cat "$1" | shuf > tmp_file
cat "$1" | shuf > tmp_file
cat "$1" | shuf > tmp_file

SEPARATOR="$2"

echo "++++++++++++++++++++++++++++++++++++++++++++"
echo "Проверка на перевод с английского на русский"
echo "++++++++++++++++++++++++++++++++++++++++++++"

for line in $(cat tmp_file); do

    english_praise=$(echo ${line} | cut -d${SEPARATOR} -f1)
    russian_praise=$(echo ${line} | cut -d${SEPARATOR} -f2)
    echo "фраза на английском звучит так: ${english_praise}"
    read -p "введите ответ на русском: " praise

    echo "++++++++++++++++++++++++++++++++++++++++++++"
    echo -e "\tправильный ответ: ${russian_praise}"
    echo "++++++++++++++++++++++++++++++++++++++++++++"

done

cat "$1" | shuf > tmp_file
cat "$1" | shuf > tmp_file
cat "$1" | shuf > tmp_file

echo "++++++++++++++++++++++++++++++++++++++++++++"
echo "Проверка на перевод с русского на английский:"
echo "++++++++++++++++++++++++++++++++++++++++++++"

for line in $(cat tmp_file); do

    english_praise=$(echo ${line} | cut -d${SEPARATOR} -f1)
    russian_praise=$(echo ${line} | cut -d${SEPARATOR} -f2)
    echo "фраза на русском звучит так: ${russian_praise}"
    read -p "введите ответ на английском: " praise
   
    if [ "${english_praise}" != "${praise}" ]; then
        echo -e "\tОШИБКА!"
echo  -e "\tправильный ответ: ${english_praise}"
errors_array[$j]="${english_praise} --> ${russian_praise}"
((j++))
    else
echo -e "\t\tВЕРНО!!"
    fi
   
done


echo "вы допустили следующие ошибки:"
echo "=============================="
for ((i=0;i<${#errors_array[@]};i++)); do
echo
echo "${errors_array[$i]}"
done

IFS=$OLD_IFS
rm tmp_file
« Последнее редактирование: 18 Июня 2025, 11:27:02 от artemu88 »

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 8059
    • Просмотр профиля
Первые попавшиеся две твои строки:
#!/usr/bin/bash
#!/bin/bash
Так где у тебя bash?

Оффлайн artemu88

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
andytux, спасибо!
Не доглядел. Писал на разных компах. Исправил. Спасибо!

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 8059
    • Просмотр профиля
Ещё интересней. Исправил на что?

english_praise=`echo $line | cut -d${SEPARATOR} -f1`Такой вариант считается устаревшим. Почему-бы, для единообразия, не сделать как у тебя выше:
rus=$(trans :ru -no-ansi -b "$eng")
english_praise=$(echo $line | cut -d${SEPARATOR} -f1)

Оффлайн artemu88

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
andytux, спасибо, исправил.

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 8059
    • Просмотр профиля
Вот у тебя есть переменные:
rus
russian_praise
Вот здесь что получится:
правильный ответ: $russian_praiseЗначение переменной "${russian_praise}" или "${rus}sian_praise" - значение переменной "rus" и к нему присоединено выражение "sian_praise".
Для единообразия, выбрать форму записи с фигурными скобками.

Оффлайн artemu88

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
andytux, не совсем Вас понял.
Там 2 переменные и 2 разных скрипта.

Оффлайн andytux

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 8059
    • Просмотр профиля
Я не стал выдумывать, взял конкретно из твоего примера. Представь, в скрипте больше двух переменных, скрипт длиннее двух десятков строк...
Использование нотации с фигурными скобками даёт однозначное толкование. Аналогично, заключение значения переменной в кавычки.

Заметь, ни один случай не является ошибкой, но когда эта грабля сработает, будет очень больно.

Оффлайн artemu88

  • Автор темы
  • Участник
  • *
  • Сообщений: 126
    • Просмотр профиля
andytux, спасибо, исправил.

 

Страница сгенерирована за 0.035 секунд. Запросов: 26.