Linux下shell编程

来源:互联网 发布:膜法师知乎事件 编辑:程序博客网 时间:2024/05/01 13:29
“石头、剪刀、布”问题的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
0 0
原创粉丝点击