使用Shell编写电子词典
代码块
字典是可以从网上找上传至linux或者直接使用网上词典;
#!/bin/bash
#
#*****************************************************************
#Author: King@1208
#QQ: #########
#Date: 2021-10-24
#URL: https://blog.csdn.net/weixin_44847002
#FileName: dictionary.sh
#Copyright(C): 2021 All rights reserved
#*****************************************************************
###字典文件地址
BOOK=/project/sh/dictionary.txt
###查找英文
function1 (){
read -p "请输入要查找的英文:" ENGLISH
ANSWER_EN=`grep -w "$ENGLISH" $BOOK`
ANSWER=`grep -w "$ENGLISH" $BOOK | sed "s/$ENGLISH //p" | head -n 1` ##取中文释义
if [ -n "$ANSWER_EN" ] ;then
echo -e "\033[35m $ENGLISH 的中文意思是:$ANSWER \033[0m"
else
echo -e "\033[33m 没有此单词!!\033[0m"
fi
}
###查找中文
function2 (){
read -p "请输入要查找的中文:" CHINESE
AN=`grep "$CHINESE" $BOOK | egrep -o "[a-z]+ " | wc -l` ##取出的中文有多少行(数字)
if [ $AN -eq 0 ] ;then
echo -e "\033[33m 没有此中文的释义!!\033[0m"
else
for((i=1;i<=$AN;i++));do ##使用for语句连续打印各个释义的英文
TRANS=`grep "$CHINESE" $BOOK | egrep -o "[a-z]+ " | sed -n "$i p"` ##取英文
CHINESES=`grep "$CHINESE" $BOOK | egrep -o "[^[:space:]]+" | awk 'NR%2==0' | sed -n "$i p"` ##取中文
echo -e "\033[35m $CHINESES 对应的英文是:$TRANS \033[0m";
done
fi
}
###删除单词
function3 (){
read -p "要删除的单词:" DELETE
DEL=`sed -n "/\<$DELETE\>/=" $BOOK` ##使用sed匹配的行号(数字)
if [ ! $DEL ] ;then
echo -e "\033[33m 没有此单词!!\033[0m"
else
sed -i "$DEL"d $BOOK ##使用sed删除匹配的行内容
echo -e "\033[35m 删除成功!\033[0m"
fi
}
###添加单词
function4 (){
read -p "要添加的单词:" ADD
read -p "请输入中文释义:" ADDS
WORDS="$ADD $ADDS"
echo $WORDS >> $BOOK ##重定向到字典后面
echo -e "\033[35m 添加成功!\033[0m"
}
###修改单词
function5 (){
read -p "请输入要修改的单词:" AMEND
if [ -n "$AMEND" ] ;then
read -p "请输入修改后的英文和中文(其间请用空格或换行隔开):" AFTERE AFTERC
TRANSLATE=`grep "\<$AMEND\>" $BOOK | sed "s/$AMEND //p" | head -n1` ##取修改单词的中文
sed -i "s/\<$AMEND\>/$AFTERE/g" $BOOK ##修改英文
sed -i "s/$TRANSLATE/$AFTERC/g" $BOOK ##修改中文
echo -e "\033[35m 修改成功!\033[0m"
else
echo -e "\033[33m 没有此单词,无效修改!!\033[0m"
fi
}
color1='\033[32m'
###菜单列表打印
echo -e "\033[40;37m 当前词典一共有7986个单词\033[0m"
echo -e "$color1 *************************\033[0m"
echo -e "$color1 |*******1.英译汉********|\033[0m"
echo -e "$color1 |*******2.汉译英********|\033[0m"
echo -e "$color1 |*******3.删除词条******|\033[0m"
echo -e "$color1 |*******4.添加词条******|\033[0m"
echo -e "$color1 |*******5.修改词条******|\033[0m"
echo -e "$color1 |*******6.保存并退出****|\033[0m"
echo -e "$color1 *************************\033[0m"
###实现菜单方式的选择
while true ;do
read -p "请输入序号:" NUM
case $NUM in
1)
function1
;;
2)
function2
;;
3)
function3
;;
4)
function4
;;
5)
function5
;;
6)
echo -e "\033[34m 欢迎再次使用^_^\n \033]0m"
break;
;;
*)
echo -e "\033[33m ***请输入正确的序号*** \033[0m"
esac
done