linux哪些程序需要指定终端,Linux程序员福利 - 追女友神奇(Linux终端运行炫酷程序)...

一、功能简介

作为IT人员,给同事的感觉呆板,不会会浪漫,不懂情趣。其实不然,我们可以用我们的技能创造出IT人员独有的浪漫。girlLove脚本就可以实现IT人员的浪漫。girlLove本质上是一个简易的问答系统,通过设置不同的问题和答案来实现“浪漫”效果。读者通过改写该脚本,可以很轻松的实现一个基于Linux终端的调查系统或考试系统等。

二、实现方法

girlLlove脚本可以展示如下几个部分:文字特效(poetry),问题(question),问题选项(bakans),答案(answer)和提示(tips)。这些内容都保存在shell数组(girlLove.txt文件)中,并且是一一对应的关系,在主程序girlLove.sh中通过while循环一个一个的展示出来。以上各部分的具体内容都可以在girlLove.txt文件中设定,设定的选项数量和用户的屏幕相关,如果读者显示屏幕过小,则选项数量多了有可能产生位置偏移等影响。

1. 终端上的字是输出在指定位置的,通过以下代码记录终端的X/Y轴信息

# pos_stdy:输出位置为 2/3 x 终端Y轴长度;pos_stdx:输出位置为 1/2 x 终端X轴长度

pos_stdy="$(($(stty size|cut -d‘ ‘ -f1) / 3 * 2))"

pos_stdx="$(($(stty size|cut -d‘ ‘ -f2) / 2))"

# total_stdx:终端X轴长度,total_stdy:终端Y轴长度

total_stdy="$(($(stty size|cut -d‘ ‘ -f1)))"

total_stdx="$(($(stty size|cut -d‘ ‘ -f2)))"

2. print_xy函数用来根据自己设定的算法控制字符输出位置

# 该函数用来控制字符串的打印位置

# 参数1:要打印的字符串;参数2:根据参数2来选择不同的位置计算公式,不同类型的字符串,位置计算公式不同;

# 参数3:用来控制字符在Y轴的打印位置;参数4:用来控制字符在X轴的打印位置;

function print_xy()

{

if [ $# -eq 0 ]; then

return 1

fi

len=`expr ${#1} / 2`

if [ $# -lt 2 ]; then

pos="\e[${pos_stdy};$((${pos_stdx} - ${len}))H"

elif [ $2 = "-" ]; then

pos="\e[$((${pos_stdy} - $3));$((${pos_stdx} - ${len}))H"

elif [ $2 = "+" ]; then

pos="\e[$((${pos_stdy} + $3));$((${pos_stdx} - ${len}))H"

elif [ $2 = "lu" ]; then

pos="\e[$((${pos_stdy} - $3));$((${pos_stdx} - $4))H"

elif [ $2 = "ld" ]; then

pos="\e[$((${pos_stdy} + $3));$((${pos_stdx} - $4))H"

fi

echo -ne "${pos}$1"

}

3. 循环输出问题

while [ ${seq} -lt ${#poetry[@]} ]

do

...

done

4. 更多详情请参考程序内更详细的注释

# 循环18个问题,为求效果,问题数要比$poetry变量行数多1

while [ ${seq} -lt ${#poetry[@]} ]

do

sleep 0

isanswer=0

# 打印问题

print_xy "问: ${question[$seq]}" ld 2 $offset

# 打印问题选项

print_xy "${bakans[$seq]}" + 3

# 打印回答栏

print_xy "答: " ld 4 $offset

# 读取终端输入到变量ans

read ans

....

5. 完整的程序如下

#!/bin/sh

: << EOF

使用方法:

./girlLove.sh 女朋友名字

EOF

# 设置女朋友的名字,用来在终端展示

name="$1"

# 读入girlLove.txt文件中所设置的变量

. ./girlLove.txt

# 脚本结束语

declaration="$name 让我守护你一辈子!"

# pos_stdy:输出位置为 2/3 x 终端Y轴长度;pos_stdx:输出位置为 1/2 x 终端X轴长度

pos_stdy="$(($(stty size|cut -d‘ ‘ -f1) / 3 * 2))"

pos_stdx="$(($(stty size|cut -d‘ ‘ -f2) / 2))"

# total_stdx:终端X轴长度,total_stdy:终端Y轴长度

total_stdy="$(($(stty size|cut -d‘ ‘ -f1)))"

total_stdx="$(($(stty size|cut -d‘ ‘ -f2)))"

# 开始答题时,给出的提示信息(屏幕最底部的提示信息)

info="$name 这就是送你的礼物了 选择1-4并按下回车开始答题吧"

# 进度条前面显示的提示信息

head="$name 当前的答题进度: "

# 在终端输出declaration变量中设置的信息,通过while循环和for循环实现动画效果

function waiting()

{

i=1

# 通过while循环实现 // 转圈的动画效果

while [ $i -gt 0 ]

do

for j in ‘-‘ ‘\\‘ ‘|‘ ‘/‘

do

# 打印前面6个/符号 + declaration变量中的内容

echo -ne "\033[1m\033[$(($(stty size|cut -d‘ ‘ -f1) / 3 * 2));$(($(stty size|cut -d‘ ‘ -f2) / 2 - ${#declaration} - 6))H$j$j$j$j$j$j\033[4m\033[32m${declaration}"

# 打印后面六个/符号

echo -ne "\033[24m\033[?25l$j$j$j$j$j$j"

usleep 100000

done

((i++))

done

}

# 该函数用来控制字符串的打印位置

# 参数1:要打印的字符串;参数2:根据参数2来选择不同的位置计算公式,不同类型的字符串,位置计算公式不同;

# 参数3:用来控制字符在Y轴的打印位置;参数4:用来控制字符在X轴的打印位置;

function print_xy()

{

if [ $# -eq 0 ]; then

return 1

fi

len=`expr ${#1} / 2`

if [ $# -lt 2 ]; then

pos="\e[${pos_stdy};$((${pos_stdx} - ${len}))H"

elif [ $2 = "-" ]; then

pos="\e[$((${pos_stdy} - $3));$((${pos_stdx} - ${len}))H"

elif [ $2 = "+" ]; then

pos="\e[$((${pos_stdy} + $3));$((${pos_stdx} - ${len}))H"

elif [ $2 = "lu" ]; then

pos="\e[$((${pos_stdy} - $3));$((${pos_stdx} - $4))H"

elif [ $2 = "ld" ]; then

pos="\e[$((${pos_stdy} + $3));$((${pos_stdx} - $4))H"

fi

echo -ne "${pos}$1"

}

# 调用clear清屏

clear

# 在1/2 X轴,2/3 Y轴的位置处打印如下字符串(格式化界面)

print_xy "*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*"

# 在终端底部中间位置处打印$info信息

printf "\r\e[${total_stdy};$(((${total_stdx} - ${#info}*2)/2))H${info}"

offset=14

seq=0

# 循环18个问题,为求效果,问题数要比$poetry变量行数多1

while [ ${seq} -lt ${#poetry[@]} ]

do

sleep 0

isanswer=0

# 打印问题

print_xy "问: ${question[$seq]}" ld 2 $offset

# 打印问题选项

print_xy "${bakans[$seq]}" + 3

# 打印回答栏

print_xy "答: " ld 4 $offset

# 读取终端输入到变量ans

read ans

# 光标上移3行,并清除从光标到行尾的内容(清除问题行字符)

echo -e "\033[3A\r\033[K"

# 清除问题选项行字符

echo -e "\033[K"

# 清除回答栏字符

echo -e "\033[K"

# 如果输入的值和预设的答案不同,则继续循环该问题

if [ "$ans" != "${answer[$seq]}" ]; then

# 打印 -----,格式化界面。----- 下面会显示该问题的tip

print_xy "---------------------------------------" + 5

# 显示该问题的tip

print_xy "${tips[$seq]}" + 7

# 等待1s

sleep 1

# 将光标移到行首,并清除光标到行尾的字符

echo -e "\r\033[K"

# 光标上移3行,并清除光标到行尾的字符

echo -e "\033[3A\r\033[K"

continue

fi

# 问题序号 + 1

seq=`expr ${seq} + 1`

# 获取poetry的倒数第seq + 1行

curseq=`expr ${#poetry[@]} - ${seq}`

......

# 设置红色背景

printf "\e[41m"

# 清屏

clear

# 输出declaration变量的信息

waiting

6. 相关的问题和答案文件设计如下:

poetry=(

"㊣━━^-^o中华人民共和国o^-^━━㊣ " "┃ 谨祝:   ┃ " "┃ $name 小盆友 天天开心! ┃ " "┃     XXX 颁 ┃" "㊣━━^-^o中华人民共和国o^-^━━㊣" " " "嘟嘟oοО○●哇靠!!!快让开】 " "  ╭══╮老婆!开车罗\`坐好啊 " " ╭╯五档║老公!开慢点\`我兴奋  " " ╰⊙═⊙╯。oо○ 压死了不赔!" )

question=( "坐在你旁边的是你什么人?" "你老公老家是哪个镇的?" "老公会做下列哪种饭?" "丽丽最爱看电视剧还是电影?" "question 5" "question 6" "question 7" "question 8" "question 9" "question 10" "question 11")

bakans=( "1 男朋友;2 对象;3 老公 4 以上都不是" "1 香花;2 毛堂;3 九重;4 以上都不是" "1 粥;2 泡面;3 米饭 4 以上都是" "1 电视剧;2 电影" "1 option1 2 option2 3 option3 4 option4" "1 option1 2 option2 3 option3 4 option4" "1 option1 2 option2 3 option3 4 option4" "1 option1 2 option2 3 option3 4 option4" ...

三、安装方法

1、准备工作

1台Linux服务器

2、安装步骤

1. 下载附件:

girlLove.zip

2. 解压girlLove.zip:

# unzip girlLove.zip

3. 进入girlLove目录执行./girlLove.sh命令

# cd girlLove

# ./girlLove.sh

答案:3,3,4,1,1,1,1,1,1,1

3、使用方法

1. 修改girlLove.txt里面的:question(问题), bakans(选项), answer(答案), tips(提示)

2. 执行girlLove.sh命令

./girlLove.sh

3. DIY自己的问题和答案

只需要修改girlLove.txt文件即可,需要修改:question(问题), bakans(选项), answer(答案), tips(提示)。注意修改的时候数目要一致。poetry变量行数需要等于问题个数+1,如果不满足需要自行DIY poetry变量行数。

四、运行效果

4a129c69353a16cf45d5548b514d1e1b.gif

五、压缩包文件截图

整个程序只有三个文件,如下图所示:

36cd7241dadb6c61eee9f19271cea36c.png

六、其他补充

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值