new-words
annotate learn-words.sh @ 33:720a701b2ba9
-S and -N keys
author | Igor Chubin <igor@chub.in> |
---|---|
date | Sun Dec 12 10:04:06 2010 +0100 (2010-12-12) |
parents | |
children |
rev | line source |
---|---|
igor@4 | 1 #!/bin/bash |
igor@4 | 2 |
igor@4 | 3 LANGUAGE=en |
igor@4 | 4 N=50 |
igor@4 | 5 REVERSED=NO |
igor@4 | 6 |
igor@4 | 7 show_usage() |
igor@4 | 8 { |
igor@4 | 9 cat<<USAGE > /dev/stderr |
igor@4 | 10 |
igor@4 | 11 Usage: |
igor@4 | 12 $0 [ -l LANG ] [ -r ] [ N ] |
igor@4 | 13 |
igor@4 | 14 Help to learn N (number) previously marked words from LANG language. |
igor@4 | 15 |
igor@4 | 16 Options: |
igor@4 | 17 -r reversed mode (show the note first; the word second) |
igor@4 | 18 |
igor@4 | 19 By default: |
igor@4 | 20 |
igor@4 | 21 LANG = $LANGUAGE |
igor@4 | 22 N = $N |
igor@4 | 23 REVERSED = $REVERSED |
igor@4 | 24 |
igor@4 | 25 USAGE |
igor@4 | 26 } |
igor@4 | 27 |
igor@4 | 28 if [ "$1" = -l ] |
igor@4 | 29 then |
igor@4 | 30 if [ -n "$2" ] |
igor@4 | 31 then |
igor@4 | 32 LANGUAGE="$2" |
igor@4 | 33 shift 2 |
igor@4 | 34 else |
igor@4 | 35 echo "Error: Please, specify LANGUAGE (en, de, ru,...) after -l or don't use -l switch" > /dev/stderr |
igor@4 | 36 show_usage |
igor@4 | 37 exit 1 |
igor@4 | 38 fi |
igor@4 | 39 fi |
igor@4 | 40 |
igor@4 | 41 if [ "$1" = -r ] |
igor@4 | 42 then |
igor@4 | 43 REVERSED="YES" |
igor@4 | 44 shift |
igor@4 | 45 fi |
igor@4 | 46 |
igor@4 | 47 if [ -n "$1" ] |
igor@4 | 48 then |
igor@4 | 49 if echo "$1" | grep -qx '[0-9]\+' |
igor@4 | 50 then |
igor@4 | 51 N="$1" |
igor@4 | 52 else |
igor@4 | 53 echo "Error: Number of words N should be numeric. " > /dev/stderr |
igor@4 | 54 echo " Please provide a number or don't specify N at all " > /dev/stderr |
igor@4 | 55 show_usage |
igor@4 | 56 exit 1 |
igor@4 | 57 fi |
igor@4 | 58 fi |
igor@4 | 59 |
igor@4 | 60 notes_file=~/".new-words/notes-$LANGUAGE".txt |
igor@4 | 61 if [ -e $notes_file ] |
igor@4 | 62 then |
igor@4 | 63 true |
igor@4 | 64 number="`wc -l $notes_file | awk '{print $1}'`" |
igor@4 | 65 if [ "$number" -lt "$N" ] |
igor@4 | 66 then |
igor@4 | 67 echo "Warning: The notes file for the language is too short. Truncating N to $number" > /dev/stderr |
igor@4 | 68 N="$number" |
igor@4 | 69 fi |
igor@4 | 70 while true |
igor@4 | 71 do |
igor@4 | 72 main_script="$$" |
igor@4 | 73 tail -n $((1+$RANDOM%$N)) $notes_file | head -1 | while read word note |
igor@4 | 74 do |
igor@4 | 75 trap "kill -1 $main_script; kill -1 $$" 2 |
igor@4 | 76 if [ "$REVERSED" = "NO" ] |
igor@4 | 77 then |
igor@4 | 78 echo $word |
igor@4 | 79 read < /dev/tty |
igor@4 | 80 echo $note |
igor@4 | 81 read < /dev/tty |
igor@4 | 82 clear |
igor@4 | 83 else |
igor@4 | 84 echo $note |
igor@4 | 85 read < /dev/tty |
igor@4 | 86 echo $word |
igor@4 | 87 read < /dev/tty |
igor@4 | 88 clear |
igor@4 | 89 fi |
igor@4 | 90 done |
igor@4 | 91 done |
igor@4 | 92 else |
igor@4 | 93 echo "Error: Uknown language '$LANGUAGE'" > /dev/stderr |
igor@4 | 94 echo " File $notes_file not found" > /dev/stderr |
igor@4 | 95 exit 1 |
igor@4 | 96 fi |