Linux下shell编程
来源:互联网 发布:膜法师知乎事件 编辑:程序博客网 时间:2024/05/01 13:29
1.““石头、剪刀、布”问题的Shell脚本实现”,主要应用shell脚本编程实现良好的人机交互猜拳游戏
要求:
(1)设计两个变量,分别表示计算机和人取胜的次数,每次取胜则增1,从而在最终得到一个退出比赛的信号时比较出最终的胜负。
(2)较好的对话机制,每次比赛结束时,可以将双方的胜负情况显示出来,同时系统发问是否继续进行比赛,如回答是,则继续。(1)实现本课程设计主要应用ubantu系统
(2)打开终端,在终端下用vi编辑器建立test文件
(3)用vi编辑器编辑test文件,在test文件下编写shell脚本
编写过程:
a.先搭建程序运行的框架,外层用一个while大循环实现游戏的重复进行
while test 0
do
…………
done
b.再在while循环中写要实现的功能的各个方法。
c.这里主要方法有三个,一个是显示出什么拳,一个是产生随机数,一个是比较判断哪方赢,方法中有的有返回值,可以用$?接受返回值
random(){……}
disphand(){……}
judgewin(){……}
d.写好各个方法后,再将程序联系起来形成一个总体,这样程序结构清晰,减少代码的冗余,让代码更规范。
(4)编写完成shell脚本后,用chmod+x test命令将脚本变为可执行文件
(5)运行脚本./test ,测试运行的结果#!/bin/bash
#产生随机数的函数
random()
{
(( y = $RANDOM )) #获得一个随机整数
#对随机整数模3,即产生0-2的随机整数,并返回产生的随机数
return $(( x = y % 3 ))
}
#显示用户出的是什么拳,该方法里有一个参数表示出的拳对应的整数
disphand()
{
#用case语句显示用户出的是什么拳
case $1 in
[1])
echo "shitou" #表示猜的是石头
;;
[2])
echo "jiandao" #表示猜的是剪子
;;
[3])
echo "bu" #表示猜的是布
;;
esac
}
#判断是电脑赢还是用户赢,该方法用两个参数,第一个是用户出的拳,第二个是电脑出的拳
judgewin()
{
if [ $1 = $2 ] #如果参数两者相等,则表示平局,返回值为0
then
return 0
elif [[ $1 = "1" && $2 ="2" ]] || [[ $1 = "2" && $2 = "3" ]] ||[[ $1 = "3" && $2 = "1" ]] #此判断表示用户赢,放回值为1
then
return 1
else #此判断表示电脑赢,返回值为2
return 2
fi
}
#程序的主入口
echo"---------caiquan-------------"
count=0
m=0
n=0
#定义记录输赢次数变量
whiletest 0 #此循环表示无限循环,直到用户操作不玩了才退出
do
while test 0 #此循环表示记录用户出的拳,如果用户输入错误,则要重新输入
do
echo "nin yao chu shen moquan?(1-shitou 2-jiandao 3-bu)"
read man #输入出的拳
if [[ $man -lt 1 ]] || [[ $man -gt 3 ]]
then
echo "nin chu de bu shiquan!"
else
break #break表示退出循环
fi
done
echo "nin chu de quan shi:"
disphand $man #调用disphand方法,传入出的拳值,显示用户出的拳
random #调用随机数方法random,该方法无参数
computer=$? #接受random方法返回的值,$?表示接受上一命令返回的值
echo "wo chu de quan shi:"
disphand $((computer+1)) #调用disphand方法,传入出的拳值,显示电脑出的拳
judgewin $man $((computer+1))#调用judgewin方法,传入两个所出的拳,返回值表示谁将赢
win=$? #接受返回值
case $win in #case判断谁赢,输出显示
[0])
echo "bu fen sheng fu"
;;
[1])
echo "ai! wo shu le."
m=$((m+1)) #用户赢m加1
;;
[2])
echo "haha! wo ying le! "
n=$((n+1)) #电脑赢m加1
;;
esac
echo "nin hai wan ma?(y/Y)"
read wantplay #是否继续玩游戏,若玩则输入y/Y,若不玩则退出
if [[ "$wantplay" !="y" ]] && [[ "$wantplay" != "Y" ]]
then
break #退出程序
fi
done
if [$m -gt $n ]
#最后根据m、n的值比较输赢,显示结果
then
echo"nin ying le $m ci,wo ying le $n ci"
echo"jie guo shi : nin ying le "
elif [$m -lt $n ]
then
echo"wo ying le $n ci,nin ying le $m ci"
echo"jie guo shi : wo ying le "
else
echo"nin ying le $m ci,wo ying le $n ci"
echo"wo men bu fen sheng fu !"
fi- Linux下Shell编程
- linux下shell编程
- Linux下Shell编程
- Linux下shell编程
- Linux 下shell编程
- Linux下Shell编程
- Linux 下shell编程
- Linux下shell编程
- linux下shell编程
- Linux下shell编程基础
- Linux下的shell编程
- linux下Shell编程基础
- Linux下Bash Shell编程
- Linux下shell编程实例
- linux 下shell编程简介
- linux下的shell编程
- Linux下shell脚本编程
- Linux下shell编程实例
- Eclipse优化设置
- 日志一:GUI的初始和GUI编程初步
- 【剑指Offer学习】【面试题28 :字符串的排列】
- ios自用学习笔记-Objective-C之block学习
- Docker, Hyper和GuestOS的终结
- Linux下shell编程
- Linux下TI omap芯片 MUX 配置分析(以AM335X芯片为例)
- swift排序算法和数据结构
- 算法与数据结构先导章
- solrj 高亮显示
- Makefile经典教程
- python删除list元素
- Golang slice 切片
- 输入迭代器和输出迭代器的使用