Linux Shell: 写程序 背单词

发布时间 2023-12-23 14:00:29作者: 武平宁

网上下载了一个英语词根和英语单词文件,包含导入到数据库的sql语句:english-root.sqlenglish_word.sql,于是写个脚本辅助背单词。

脚本

脚本逻辑:通过随机数获得词根编号,取得词根,过滤出其中的词根字符,并从数据库中提取以这些词根字符开头的单词。
脚本操作:接收一个传入参数,指定一次从数据库中提取单词的最大值,缺省值20; 按回车,随机下一个词根,提取单词了;按a,显示上一个词根及单词。

#!/bin/bash                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                  
num=${1:-20}                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                  
p_word()                                                                                                                                                                                                                                                                          
{                                                                                                                                                                                                                                                                                 
        clear                                                                                                                                                                                                                                                                     
        echo -e "Today is the \033[1m\033[4m`date +%u`\033[0m day of week, the \033[1m\033[4m`date +%V`\033[0m week and \033[1m\033[4m`date +%j`\033[0m day of this year. "                                                                                                       
                                                                                                                                                                                                                                                                                  
        tput cup 2 0                                                                                                                                                                                                                                                              
        echo -e "Current Time: \033[36m\033[1m`date +%T`\033[0m"                                                                                                                                                                                                                  
        echo                                                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                  
        echo -e "\e[42m => $word_root \e[0m"                                                                                                                                                                                                                                      
                                                                                                                                                                                                                                                                                  
        pre=`echo $word_root | sed 's/[一-龥]//g' | tr -d ','`                                                                                                                                                                                                                   
        pre_len=`echo $pre | awk -F '[,=]' '{print NF}'`                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                  
        [ 1 -le $pre_len ] && {                                                                                                                                                                                                                                                   
            pre_=`echo "$pre" | awk -F '[,=]' '{print $1}'`                                                                                                                                                                                                                       
            echo "- $pre_"                                                                                                                                                                                                                                                        
            mysql -e "select word,explains from english.eng_words where word like '${pre_}%' limit $num;"                                                                                                                                                                         
        }                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                  
        [ 2 -le $pre_len ] && {                                                                                                                                                                                                                                                   
            pre_=`echo "$pre" | awk -F '[,=]' '{print $2}'`                                                                                                                                                                                                                       
            echo "- $pre_"                                                                                                                                                                                                                                                        
            mysql -e "select word,explains from english.eng_words where word like '${pre_}%' limit $num;"                                                                                                                                                                         
        }                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                  
        [ 3 -le $pre_len ] && {                                                                                                                                                                                                                                                   
            pre_=`echo "$pre" | awk -F '[,=]' '{print $3}'`                                                                                                                                                                                                                       
            echo "- $pre_"                                                                                                                                                                                                                                                        
            mysql -e "select word,explains from english.eng_words where word like '${pre_}%' limit $num;"                                                                                                                                                                         
        }                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                  
        [ 4 -le $pre_len ] && {                                                                                                                                                                                                                                                   
            pre_=`echo "$pre" | awk -F '[,=]' '{print $4}'`                                                                                                                                                                                                                       
            echo "- $pre_"                                                                                                                                                                                                                                                        
            mysql -e "select word,explains from english.eng_words where word like '${pre_}%' limit $num;"                                                                                                                                                                         
        }                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                  
        tput civis # 光标不可见                                                                                                                                                                                                                                                   
        sleep 1 # 等待1秒                                                                                                                                                                                                                                                         
}                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                  
random_number=$(( RANDOM % 252 + 1 ))                                                                                                                                                                                                                                             
word_root=`mysql -e "select root from english.eng_root where id=$random_number;" |tail -1 `                                                                                                                                                                                       
p_word                                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                  
while : ; do                                                                                                                                                                                                                                                                      
        read -n 1 input                                                                                                                                                                                                                                                           
        if [[ $input == "" ]]; then                                                                                                                                                                                                                                               
                lw=$word_root                                                                                                                                                                                                                                                     
                random_number=$(( RANDOM % 252 + 1 ))                                                                                                                                                                                                                             
                word_root=`mysql -e "select root from english.eng_root where id=$random_number;" |tail -1 `                                                                                                                                                                       
                p_word                                                                                                                                                                                                                                                            
        elif [[ $input =~ "a" ]] ; then                                                                                                                                                                                                                                           
                word_root=$lw                                                                                                                                                                                                                                                     
                p_word                                                                                                                                                                                                                                                            
        fi                                                                                                                                                                                                                                                                        
done