关键词:
本内容选自《跟老男孩学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
(二)使用方法
[[email protected] ~]# tar xf girlLove.tar.gz #<==获取到工具软件包,解压。
[[email protected] ~]# cd girlLove/
[[email protected] girlLove]# tree
.
├── girlLove.sh #<==实现脚本
└── girlLove.txt #<==特效及问答模板
0 directories, 2 files
[[email protected] 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.com
girlname="$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"
# 清屏
clear
printf " e[10;30HE[33m${logo}E[0m "
sleep 2
printf " e[10;30HE[33;5m${logo}E[0m "
sleep 2
printf "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" 33[1m 33[$pos_stdy;$((${pos_stdx}/3))H$j$j$j 33[4m 33[32m${decl}"
# 打印后面若干个/特效符号
echo -ne" 33[24m 33[?25l$j$j$j"
# 打印前面若干个/特效符号+good变量中的内容
echo -ne " 33[1m 33[$(($pos_stdy-2));$((${pos_stdx}/3))H$j$j$j 33[4m 33[32m${good}"
# 打印后面若干个/特效符号
echo -ne" 33[24m 33[?25l$j$j$j"
usleep 100000
done
((i++))
done
}
function print_info(){
# 打印如下字符串(格式化界面)
print_xy"*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*"
print_xy"E[33m${info}E[0m" + 1
offset=20
seq=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 " 33[3A 33[K"
# 清除问题选项行字符
echo -e " 33[K"
# 清除回答栏字符
echo -e " 33[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 " 33[K"
# 光标上移3行,并清除光标到行尾的字符
echo -e " 33[3A 33[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" e[${total_stdy};19H${head}e[43m%${per}se[41m%${shengyu}se[00m""" "";
done
printf " e[$((${total_stdy}));19H E[33m 恭喜我心中最美的${girname}全部答对E[0m";
# 设置红色背景
printf "e[41m"
# 清屏
clear
}
function main(){
if [ $# -ne 1 ]; then
usage
fi
start
clear
print_info
waiting
}
main $*
提示:此案例已收录至《跟老男孩学linux运维:Shell高级编程实战》一书,本书预计于2016年12月底或1月初出版。本文系根据原作者fork兄弟的shell程序扩展而来。
老男孩教育的第三本书精品书籍,《跟老男孩学习Linux运维:精通linux三剑客》即将出版,敬请期待!
加群linux运维专家2000人Q群384467551(最后100个人名额) 获取本文源码文件包,也去浪漫一发啊,不会写改改文本文件总会吧?请加群务必注明来自51CTO博客。
本文出自 “老男孩linux培训” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/1864839
zabbix实战之运维篇zabbix监控平台的邮件报警配置
【Zabbix实战之运维篇】Zabbix监控平台的邮件报警配置一、检查Zabbix监控平台状态1.检查Zabbix各组件容器状态2.检查Zabbix-server状态二、Zabbix的媒介管理配置1.进入媒介管理界面2.创建媒介类型3.媒介类型配置4.消息类型配置三、测试... 查看详情
zabbix实战之运维篇zabbix监控web网站配置方法
【Zabbix实战之运维篇】Zabbix监控web网站配置方法一、检查Zabbix监控平台状态1.检查Zabbix各组件容器状态2.检查Zabbix-server状态二、配置监控主机的web服务1.安装httpd2.配置网页内容3.关闭防火墙和selinux4.启动httpd服务5.访问web服务三、Z... 查看详情
zabbix实战之运维篇zabbi监控平台的web基本操作
【Zabbix实战之运维篇】Zabbi监控平台的web基本操作一、检查Zabbix服务器状态1.检查Zabbix各组件状态2.检查Zabbix-server状态二、Zabbix的用户管理1.查看用户群组2.创建用户组3.创建用户角色4.创建用户5.查看创建的用户6.测试登录Zabbix7.修... 查看详情
vagrant之运维,搭建统一开发环境
特点:通过vagrant打包环境,可以跨平台使用。意思就是在windows下可以使用ubuntu系统配置的环境使用的平台:windows+64位需要准备的工具: virtualbox:虚拟机 https://www.virtualbox.org/w... 查看详情
zabbix实战之运维篇zabbix监控平台的简单性能调优
【Zabbix实战之运维篇】Zabbix监控平台的简单性能调优一、Zabbix性能优化介绍1.造成Zabbix服务器变慢原因2.Zabbix性能调优的方法二、检查Zabbix服务器的资源占用情况1.检查Zabbix各组件容器的资源占用情况2.查看Zabbix系统的当前负载状... 查看详情
it运维自动化的前景如何?
都在喊IT运维自动化,这个究竟前景如何?2020年IT运维市场前景分析2019年10月29日,第一财经刊发了关于《工信部:加强5G、人工智能、工业互联网、物联网等新型基础设施建设》一文,其中指出,推动新型IT基础设施建设。加强5... 查看详情
运维人员必备素质
目标,方法,努力,坚持本文出自“sandshell”博客,请务必保留此出处http://sandshell.blog.51cto.com/9055959/1954105 查看详情
linux运维之路
linux运维之路Linux入门必备内容成为一个优秀的linux运维人员必要条件如何能高标准的掌握linux运维实战技术计算机硬件组成、工作原理CPU、内存、磁盘、raid卡生产工作标准详解企业生产主流品牌服务器及型号内部拆卸讲解操作系... 查看详情
云计算时代,it运维人员需要掌握哪些技术?会使用哪些运维工具?
云计算时代,IT运维人员需要掌握哪些技术?会使用哪些IT运维工具呢?云计算时代的大背景下,企业IT运维人员需要的技术知识背景其实已经发生了根本性变化,脱离了风火水电的硬件运维工作,现在反而... 查看详情
linux运维之路
linux运维之路Linux入门必备内容成为一个优秀的linux运维人员必要条件如何能高标准的掌握linux运维实战技术计算机硬件组成、工作原理CPU、内存、磁盘、raid卡生产工作标准详解企业生产主流品牌服务器及型号内部拆卸讲解操作系... 查看详情
云运维必备知识-云运维定义以及工作内容讲解
...企业开始将业务迁移到云端,实现了企业上云。因此运维人员也从传统的IT运维转变成了云运维。那具体什么是云运维呢?云运维工作内容包含哪些?从事云计算运维可以考取哪些证书?云运维必备工具是什么ÿ... 查看详情
普通运维人员就是秋后的蚂蚱!
...是一个IT屌丝,但特别喜欢关注整个大行业的动态,干IT运维相关工作到现在也快8年了,企业对运维人员的专业能力要求确实提高了不少,现在再去面个运维工程师的职位都要求会个开发语言啥的,这在2007是不可想象的,那个... 查看详情
02.springcloud实战项目-快速搭建linux环境-运维必备
SpringCloud实战项目全套学习教程连载中PassJava学习教程简介PassJava-Learning项目是PassJava(佳必过)项目的学习教程。对架构、业务、技术要点进行讲解。PassJava是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面... 查看详情
云网络运维必备神器:全链路故障诊断与分析
...现三层网络路径可视化。本文分享自华为云社区《云网络运维必备神器:全链路故障诊断与分析》,作者:周艳春|华为云Stack高级工程师。背景网络 查看详情
课程表安排
第一部分:linux网站运维必会基础技术知识体系基础不牢,地动山摇1、如何成为一个优秀的linux运维架构师人员1)什么是linux运维?2)linux运维岗位都做啥?3)如何学好linux运维?4)linux专业运维人员的习惯和思想5)运维人员职场必备... 查看详情
监控体系之运维
确定服务类型: IO密集型 数据库 CPU密集型 webmail 确定性能基准线: 运行队列: 1-3线程经验值,在正常情况下找一个异常值CPU监控& 查看详情
elasitcsearch开发运维常用命令集锦
Elasitcsearch集群开发运维常用命令集锦,后面会逐步扩展完善。早期总结的开发、运维常见命令清单列表如下:1、干货|Elasticsearch运维实战常用命令清单2、干货|Elasticsearch Top10监控指标3、干货|Elasticsearch开发实战常用命令... 查看详情
不懂编程的运维人员到底还能走多远?
不懂编程的运维还能走多远?且看行业内一流专家老男孩老师的深度细致分析! 首先,可以肯定的说,未来的IT岗位需要的是综合能力强的人员,运维、开发、数据库、网络,技术岗位对上述知识体系都要会一些,才能很好... 查看详情