Linux下shell编程
2015-07-02 09:12
1066 查看
“石头、剪刀、布”问题的Shell脚本实现
1.““石头、剪刀、布”问题的Shell脚本实现”,主要应用shell脚本编程实现良好的人机交互猜拳游戏
要求:
(1)设计两个变量,分别表示计算机和人取胜的次数,每次取胜则增1,从而在最终得到一个退出比赛的信号时比较出最终的胜负。
(2)较好的对话机制,每次比赛结束时,可以将双方的胜负情况显示出来,同时系统发问是否继续进行比赛,如回答是,则继续。
主要原理和思想或者解决问题的思路2.
针对本程序特点,可以让系统随机产生三个整数值。假如,设1表示石头 2表示剪子 3表示布,我们就可以用产生随机值然后取模的方法,
让系统每次产生随机值(1或2或3,如表示成0、1、2也可)。然后将该结果与每次从键盘输入的数值或字符相比较,根据规则判断计算机和人之间的胜负。
3.实现的过程及结果
(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 ,测试运行的结果
4.源程序
#!/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
1.““石头、剪刀、布”问题的Shell脚本实现”,主要应用shell脚本编程实现良好的人机交互猜拳游戏
要求:
(1)设计两个变量,分别表示计算机和人取胜的次数,每次取胜则增1,从而在最终得到一个退出比赛的信号时比较出最终的胜负。
(2)较好的对话机制,每次比赛结束时,可以将双方的胜负情况显示出来,同时系统发问是否继续进行比赛,如回答是,则继续。
主要原理和思想或者解决问题的思路2.
针对本程序特点,可以让系统随机产生三个整数值。假如,设1表示石头 2表示剪子 3表示布,我们就可以用产生随机值然后取模的方法,
让系统每次产生随机值(1或2或3,如表示成0、1、2也可)。然后将该结果与每次从键盘输入的数值或字符相比较,根据规则判断计算机和人之间的胜负。
3.实现的过程及结果
(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 ,测试运行的结果
4.源程序
#!/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 socket 初步
- android wifi 无线调试
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 我是运营,我没有假期
- 基于 Linux 集群环境上 GPFS 的问题诊断