您的位置:首页 > 运维架构

IT运维人员追女友必备神器之运维开发实战程序案例

2016-10-23 23:41 302 查看


本内容选自《跟老男孩学linux运维:Shell高级编程实战》一书之浪漫美妙Shell工具程序案例。首发于“我是老男孩”,顶尖运维专家公众号,可到文末扫码关注更多文章。

(一)功能简介

       作为IT人员,给同事的感觉呆板,不会会浪漫,不懂情趣。其实不然,我们可以用我们的技能创造出IT人员独有的浪漫。girlLove脚本就可以实现IT人员的浪漫。girlLove本质上是一个简易的问答系统,通过设置不同的问题和答案来实现“浪漫”效果。读者通过改写该脚本,可以很轻松的实现一个基于Linux终端的调查系统或考试系统等。        girlLlove脚本可以展示如下几个部分:文字特效(poetry),问题(question),问题选项(bakans),答案(answer)和提示(tips)。这些内容都保存在shell数组(girlLove.txt文件)中,并且是一一对应的关系,在主程序girlLove.sh中通过while循环一个一个的展示出来。以上各部分的具体内容都可以在girlLove.txt文件中设定,设定的选项数量和用户的屏幕相关,如果读者显示屏幕过小,则选项数量多了有可能产生位置偏移等影响。    除了girlLove外,老男孩也会讲解如何利用运维思想追女友的课程(精品免费视频),看过所有小伙伴都说收获很大。《跟着老男孩学习如何运用运维思想追到心仪的女朋友》http://edu.51cto.com/course/course_id-5907.html

(二)使用方法

[root@www ~]# tar xf girlLove.tar.gz   #<==获取到工具软件包,解压。[root@www ~]# cd girlLove/[root@ girlLove]# tree.├── girlLove.sh   #<==实现脚本└── girlLove.txt  #<==特效及问答模板0 directories, 2 files[root@www girlLove]# sh girlLove.sh lili #<==结果展示见下文。提示:解压之后,也可以编辑girlLove.txt设置自己的问题,问题选项,答案和提示,注意girlLove.txt内容的字符串格式,也需要有语法的。

(三)程序结果展示(是动画呦)

如果手机看不清,可以用电脑看,记得改改模板,使用呦,IT人必须要很浪漫呦!

(四)程序内容模板

提示:只需修改这个文件就可以为己所用了!

   这部分内容以girlLove.txt文件呈现,本质上这个文件也是一个shell脚本,因此读者改动时请注意格式,下面是girlLove.txt文件内容展现。老男孩追求女朋友问答模板(已经经过实战了的,很有效呦!)#老男孩追求女朋友的浪漫模板#文字特效(poetrys)poetrys=( "                                 " \"㊣━━^-^o中华人民共和国o^-^━━㊣  " \"┃ 谨祝:                      ┃  " \"┃   $name 小盆友 天天开心!        ┃  " \"┃                老男孩 颁 ┃"\"㊣━━^-^o中华人民共和国o^-^━━㊣" \"                                 " \"嘟嘟oοО○●哇靠!!!快让开】" \"  ╭══╮亲亲!开车罗\`坐好啊" \" ╭╯五档║老公!开慢点\`我兴奋  " \" ╰⊙═⊙╯。oо○ 轧死了不赔!" )#问题集合(question)questions=( "1、坐在你旁边的是你什么人?" \"2、你男朋友老家是哪个地方的?" \"3、你男朋友会做下列哪种饭?" \"4、丽丽最爱看下列哪一个电视剧?" \"5、你男朋友最喜欢吃什么?" \"6、你男朋友休闲的时候最喜欢干什么?"\"7、休闲时你最喜欢他陪你做什么" \"8、今年的生日礼物你最想要啥?" \"9、你计划啥时候和他一起领证?" \"10、领证后你想去哪度蜜月?" \"11、结婚后,你希望财务归谁管?(最后一道题了)")#问题选项(bakans)bakans=( "A.男朋友 B.普通朋友 C.男闺蜜 D.以上都不是" \"A.铁岭 B.沈阳 C.四平 D.以上都不是" \"A.蛋炒饭  B.鸡蛋羹 C.煮米饭  D.以上都是" \"A.电视剧  B.电影  C.话剧 D.二人转  " \"A.大葱  B.白菜  C.排骨  D.辣椒  " \"A.打台球  B.看书  C.睡觉  D.听歌  " \"A.看电视剧  B.逛街  C.旅游  D.一起起床  " \"A.钻戒  B.手机  C.包  D.高跟鞋  " \"A.6个月内  B.12个月内  C.24个月以内  D.没想好  " \"A.马尔代夫  B.巴厘岛  C.海南三亚  D.去大城市铁岭  " \ "A.老公  B.老婆  C.共同管理  D.没想好  ") #问题答案(answers)answers=( A A A A A A A A A A A) #问题提示(tips)tips=(  "Dear,选A啊,妹子啊 555.." \"Dear,选A啊,大城市铁岭,你该知道的!" \"Dear,选A啊,蛋炒饭是老男孩拿手的呦!" \"Dear,选A啊,肯定是电视剧,我比你清楚哦" \"Dear,选A啊,绝对是大葱,你比我还清楚哦" \"Dear,选A啊,台球啊,哥打台球时老帅了" \"Dear,选A啊,我陪你做你最喜欢的..." \"Dear,选A啊,钻戒必须的,而且是1克拉的"\"Dear,选A啊,这么好的男朋友,要抓住啊." \"Dear,选A啊,马尔代夫不是你的愿望么?" \"Dear,选A啊,老公不但会赚钱,还会理财呦!")

20.1.5girlLove工具Shell源码注释

#!/bin/sh# by oldboy training.# http://oldboy.blog.51cto.comgirlname="$1"pos_stdy="$(($(stty size|cut -d' '-f1)/3*2))"pos_stdx="$(($(stty size|cut -d' '-f2)/2))"total_stdy="$(($(stty size|cut -d'' -f1)))"total_stdx="$(($(stty size|cut -d'' -f2)))"logo="本节目为北京老男孩IT教育出品,祝天下所有有情人钟情眷属!"good="${girlname},你太棒了,完美答对!"decl="这辈子最疯狂的事,就是爱上了你,我会好好爱你的,请让我守候你一辈子!"info="亲,$girlname, 这是我送给你的最特别礼物,请选择A-D并按下回车开始答题吧."head="答题进度:"[ -f ./girlLove.txt ]||exit 1. ./girlLove.txt function usage(){  echo $"Usage:$0 mm_name"  exit 1} function start(){# 设置红色背景printf "\e[40m"# 清屏clearprintf "\r\e[10;30H\E[33m${logo}\E[0m\n"sleep 2printf "\r\e[10;30H\E[33;5m${logo}\E[0m\n"sleep 2printf "\e[40m"clear}function print_xy(){   if [ $# -eq 0 ]; then       return 1   fi    len=32      if [ $# -lt 2 ]; then     pos="\e[${pos_stdy};$((${pos_stdx} - ${len}))H"   fi    case "$2" in     -)       pos="\e[$((${pos_stdy} - $3));$((${pos_stdx} - ${len}))H"       ;;     +)       pos="\e[$((${pos_stdy} + $3));$((${pos_stdx} - ${len}))H"       ;;      lu)       pos="\e[$((${pos_stdy} - $3));$((${pos_stdx} - $4))H"       ;;     ld)       pos="\e[$((${pos_stdy} + $3));$((${pos_stdx} - $4))H"   esac   echo -ne "${pos}$1"}function waiting(){  local i=1  # 通过while循环实现///转圈的动画效果  while [ $i -gt 0 ]  do       for j in '-' '\\' '|' '/'       do            # 打印前面若干个/特效符号+decl变量中的内容            echo -ne"\033[1m\033[$pos_stdy;$((${pos_stdx}/3))H$j$j$j\033[4m\033[32m${decl}"            # 打印后面若干个/特效符号            echo -ne"\033[24m\033[?25l$j$j$j"            # 打印前面若干个/特效符号+good变量中的内容            echo -ne "\033[1m\033[$(($pos_stdy-2));$((${pos_stdx}/3))H$j$j$j\033[4m\033[32m${good}"            # 打印后面若干个/特效符号            echo -ne"\033[24m\033[?25l$j$j$j"            usleep 100000       done       ((i++))   done}function print_info(){# 打印如下字符串(格式化界面)print_xy"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*"print_xy"\E[33m${info}\E[0m"  + 1  offset=20seq=0# 循环问题while [ ${seq} -lt ${#poetrys[@]} ]do   sleep 0   isanswers=0    # 打印问题   print_xy "${questions[$seq]}" ld 2 $offset   print_xy "${bakans[$seq]}" ld 3 $((${offset}-2))   print_xy "答:" ld 4 $offset    # 读取终端输入到变量ans   read ans   echo -e "\033[3A\r\033[K"   # 清除问题选项行字符   echo -e "\033[K"   # 清除回答栏字符   echo -e "\033[K"   # 如果输入的值和预设的答案不同,则继续循环该问题  if [ "$ans" != "${answers[$seq]}" -a "`echo$ans|tr a-d A-D`" != "${answers[$seq]}" ]; then        # 打印 -----,格式化界面。----- 下面会显示该问题的tip       print_xy"-----------------------------------------------------" + 5        # 显示该问题的tip       print_xy "${tips[$seq]}" + 7       sleep 3       # 将光标移到行首,并清除光标到行尾的字符       echo -e "\r\033[K"       # 光标上移3行,并清除光标到行尾的字符       echo -e "\033[3A\r\033[K"       continue   fi    # 问题序号 + 1   seq=`expr ${seq} + 1`   # 获取poetrys的倒数第seq + 1行   curseq=`expr ${#poetrys[@]} - ${seq}`   # 打印poetrys的倒数第seq + 1行   print_xy "${poetrys[${curseq}]}" lu $seq $offset   # 打印进度条   total=$[${total_stdx} - ${#head}*10]   per=$[${seq}*${total}/${#poetrys[@]}]   shengyu=$[${total} - ${per}]   printf"\r\e[${total_stdy};19H${head}\e[43m%${per}s\e[41m%${shengyu}s\e[00m""" "";done      printf "\r\e[$((${total_stdy}));19H \E[33m     恭喜我心中最美的${girname}全部答对\E[0m";# 设置红色背景printf "\e[41m"# 清屏clear} function main(){if [ $# -ne 1 ]; then usagefistartclearprint_infowaiting}main $*提示:此案例已收录至《跟老男孩学linux运维:Shell高级编程实战》一书,本书[strong]预计于2016年12[/strong]月底或1月初出版。本文系根据原作者fork兄弟的shell程序扩展而来。老男孩教育的第三本书精品书籍,《跟老男孩学习Linux运维:精通linux三剑客》即将出版,敬请期待!加群linux运维专家2000人Q384467551(最后100个人名额) 获取本文源码文件包,也去浪漫一发啊,不会写改改文本文件总会吧?请加群务必注明来自51CTO博客。 扫码或点击开头的蓝色字关注更多最新文章!

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: