2016-03-01 2 views
2

У меня есть некоторые вопросы. У меня проблема со сценарием, который должен быть простой проверкой орфографии.Spell checker shell script

Что нужно сделать, когда обнаружено неправильное слово, оно предложит пользователю ввести правильное написание слова, если пользователь вводит правильную орфографию, он затем отобразит исправленное слово вместе с неправильное слово внизу (после прохождения всех слов). Но, если пользователь просто нажимает Enter, тогда он примет слово как правильное написание и поместит его в ~./Memory, так что если он снова запустится, он упустит это слово.

На данный момент правильные/неправильные варианты написания слов не отображаются и ничего не запоминается в ~./Памяти. И, честно говоря, я не совсем уверен, почему.

#! /bin/bash 
wrongWords=`aspell list < $1` 
touch ~/.memory 

for wrongWord in $wrongWords 
    do 
      echo $wrongWord "is mispelled." 
      read -p "Press ""Enter"" to keep this spelling, or type a correction here: " newWord 
      if [ "$newWord" = "" ] 
        then 
          echo "$newWord" >> ~/.memory 
      fi 
    done 

printf "%-20s %-20s \n Mispelled: Corrections:" 
printf "\n $wrongWord $newWord" 
+3

Заменить 'if [" $ newWord "=" "]' с 'if [" $ newWord "=" "]' (дополнительные пробелы). –

+1

Не понимал, что на самом деле там было место. У меня все еще есть проблемы с фактическим отображением их и запоминанием слов. – kenny10009

+0

научиться пользоваться http://shellcheck.net. Удачи. – shellter

ответ

3

Я отредактировал чувствительные части вашего скрипта, которые являются хорошей предпосылкой для поиска актуальной проблемы. Я немного объединил свою собственную логику в этом, но без особой осторожности. Я придаю отредактированный сценарий к этому вопросу с надеждой, что он будет хорошим шагом в поиске вашей проблемы, и я предлагаю вам дополнительно прочитать о следующих предметах:

Три ссылки, указанные выше, взяты из this Bash Guide, который является одним из основных и единственных источников, из которых можно узнать Bash.

Я бы также рекомендовал вам использовать ShellCheck для проверки ваших скриптов, когда это необходимо в будущем.


Редактированный сценарий. Не обязательно правильно.

#! /bin/bash 
# This script should be checked before use. 
# It is not necessarily correct. 

wrong_words=() 
new_words=() 

while read -r ww; do 

    printf '%s is mispelled.\n' "$ww" 

    wrong_words+=("$ww") 

    read -rp "Press \"Enter\" to keep this spelling, or type a correction here: " nw 

    # User provided a correction to $ww 
    if [[ $nw ]]; then 
     printf 'User corrected %s to %s\n' "$ww" "$nw" 
     new_words+=("$nw") 
    else 
     printf 'User decided to keep the spelling of %s even though it was detected to be wrong.\n' "$ww" 
    fi 

done < <(aspell list < "$1") 

# Saving new words to ~/.memory_words 
printf '%s\n' "${new_words[@]}" >> ~/.memory_words 

# Displaying info. Not necessarily useful. 
printf 'New word: %s\n' "${new_words[@]}" 
printf 'Wrong word: %s\n' "${wrong_words[@]}" 

Новые слова записываются в new_words массив. Неверные слова сохраняются в массиве wrong_words. В конце скрипта new_words массив добавляется к файлу ~/.memory_words.

+1

Спасибо, это был определенно толчок в правильном направлении. Теперь я обязательно буду использовать ShellCheck, я не знал, что это было так. Получил все это, хотя, еще раз спасибо! – kenny10009