抛砖引玉(a dictionary based for Terminal)
本帖最后由 lys5300 于 2011-05-26 22:59 编辑
那天看同学在终端上查单词觉得很好,像他资讯了一下就决定自己用bash写一个。 :em02
也厚着脸皮的发在这里来与大家交流一下。 :em06
抛砖引玉 :em11 。
再一次修改。现在可以说已经很全面了。
- #!/bin/bash
- # This is a dictionary based for Termial.
- # Its cache directory is in /tmp/dictionary/
- PS3='Your choice is : '
- word="$*"
- cache=~/.ydictionary/"$word"
- # read this word
- read_word()
- {
- re_word="$1"
- espeak -s 130 "$re_word" 1>/dev/null 2>&1
- exit 0
- }
- # judge whether read this word.
- judge_read()
- {
- readword="$1"
- clew="Read it?(y/n)y:"
- echo -ne "\033[35;1m$clew\033[00m"
- read answer
- : ${answer:=y}
- if [ "$answer" = "y" ];then
- read_word "$readword"
- else
- exit 5
- fi
- }
- if [ $# -lt 1 ];then
- echo
- echo "usag: `basename $0` [word]"
- echo
- exit 1
- fi
- if [ -e "$cache" ];then
- word2=$(cat "$cache")
- echo -e "\033[34;1m$word2\033[0m"
- echo
- judge_read "$word"
- exit 0
- elif [ ! -e ${cache%/*} ];then
- mkdir -p ${cache%/*}
- fi
- # 抓取网页快照。
- wordf=$(wget -q "http://dict.cn/ws.php?utf8=true&q=$word" -O -)
- # 截取指定字符段。
- # 判断是否有单词匹配,如果没有给出相近的。否则就进行查询。
- if echo "$wordf"|grep 'sugg' 1>/dev/null 2>&1
- then
- echo "You may want to search these words."
- sword=$(echo "$wordf"|sed -e 's/<[\/]*sugg>//g'|grep '^[^<]'|tr ["\n"] ["\t"])
- select guessw in $sword ;do
- if [ $guessw ];then
- echo -e "\033[36;1m$guessw\033[0m"
- ydic $guessw
- exit 2
- else
- read -n 1 -p "Do you want to try again:(y/n)" choice
- echo
- if [ "$choice" = "y" ] || [ "$choice" = "Y" ];then
- echo 'Please input again:'
- else
- exit 3
- fi
- fi
- done
- else
- word1=$(echo "$wordf"|sed -e 's/<[\/]*\(def\|sent\|orig\|trans\)>//g' -e 's/<em>\(.*\)<\/em>/( \1 )/g' -e 's/\(>\|<\)/ /g'|grep '^[^<]')
- echo "$word1">"$cache"
- echo -e "\033[32;1m$word1\033[0m"
- echo
- judge_read "$word"
- judge=$(cat "$cache")
- if [ "$judge" == "Not Found" ];then
- rm -f "$cache"
- fi
- #cache如果大于一百兆,提示用户。进行释放。
- total=$(du ${cache%/*}|cut -d/ -f 1)
- if [ $total -gt 102400 ];then
- echo
- echo -e "\tThe dictionary cache is beyond 100M.Maybe you can release some space."
- fi
- fi
- exit 0
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
你要考虑效率的话,别用shell了,也就一眨眼的时间,你还嫌慢?
其实不用中间文件也无所谓,直接对你wget到的信息进行处理就行了,或者干脆赋值给变量
搬砖
wget 的-O参数后面接-
-O -
就是打到标准输出
然后后面再加一个管道处理即可,这样就不用写临时文件
你用过我的脚本了吗?
呵呵,也许你眨眼的时间有时候忒长了点。(有时候)
是诶,但是我发觉那样对结果就不好解析了。改天再试试吧,不断的将它完善。
不过我现在要去做体育试卷了。。。。。呜呜。。
真牛逼啊,这程序太强了,执行效率好高啊,运行的好快啊,快的连我眨眼的时间和其比起来都显得如此的漫长,佩服佩服啊,真是个大拿,让我等卢瑟情何以堪……哎……看来要回去好好学习下shell了……LZ让我对shell有了新的认识……
回复 8# xiaopan3322
在此我不想和你做这种毫无意义的辩解,因为那样本身就违背了我将这个脚本发在这上面的初衷,你是善意也好,恶意也罢,都无所谓。对吧,因为你的回答对我没有任何的参考价值,Linux下的人都是热心与帮助别人的,而我从你的身上看到的却不是。你又叫我能奈你何呢?如果你不想看,觉得不好,那你大可以避而远之。我等亦乐此不疲的做这些事。
第一次发贴就如是,实让人哀叹。希望你能忽略我的片面之言,如果你反其道而行之。那着实让人心寒,辛酸。
回复 9# lys5300
这位兄弟,学习你的帖子!
xiaopan兄应该对你没有恶意,可能你有些敏感了