select case的用法-函数练习-20160819

§·select  case的用法

介绍select 循环与菜单

◎语法

select  variable  in  list[ ]

do

循环体命令

Done 

select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输

◎用户输入菜单列表中的某个数字,执行相应的命令

◎用户输入被保存在内置变量REPLY 中。

 Select举例分析

举例:

root@Centos7 funtion]# cat slect.sh 
#!//bin/bash
PS3="what do you want?" ; select caidan in baicai baocai luobo ;do  #列表数量与执行的菜单数量相同
echo "$caidan"     #变量保存列表中的相对应的参数
done
 
[root@Centos7 funtion]# bash slect.sh 
1) baicai         
2) baocai
3) luobo 
what do you want?   
#选择对应的编号,相当于让变量  $caidan 等于相应的列表内容,由于我们选择编号可以让变量有相应的值,则我们可以在判断 变量的值让其显示相对应的内容,配合case使用功能比较好。

PS3:为输入提示符  PS3=what do you want ?

variablecaidan 为变量;

list[ ] :baicai  baocai  luobo变量的列表; 

举例select case的配合使用举例

v◎select 是个无限循环,因此要记住用break 命令退出循环,或用exit 命令终止脚本。也可以按ctrl+c 退出循环。

v◎select 经常和case 联合使用

v◎与for 循环类似,可以省略in list ,此时使用位置参量

 

举例:我们创建一个菜单,当选择对应的编号时,显示菜的价格,当按q键,退出脚本?

 

解:解题思路:由于select 循环语句是无限循环下去的,我们需要点的菜的的名称保存在变量 $caidan中,我们输入的值保存在内置变量REPLY

所以我们可以在case中使用我们的变量  $caidan ,判断 $caidan的值显示对应的菜的价格信息;

在另外一个case中使用内置变量$REPLY ,保存我们键盘输入的值,判断$REPLY的值,我们是否退出循序。

难点:使用一个 case $caidan是无法保存我们键盘输入的值的,所以我们无法通过$caidan的变量内容实现我们退出的,一定要注意 $caidan保存的值为 list的元素 

[root@Centos7 funtion]# cat slect.sh 
#!//bin/bash
PS3="what do you want?" ; select caidan in baicai baocai luobo ;do  #屏幕显示菜单列表
echo "$caidan"
 
case  $REPLY  in      #使用内置变量$REPLY保存我们键盘输入的值,注意,一定需要放在 $caidan的前 面,不然在 $caidan的会显示 *)的内容,用if判断可以解决这个问题,现在不讨论
q)
echo "you exiting ......"
break
;;
c)
echo "contiune ....."
continue 
;;
esac
 
case  $caidan  in  #使用变量$caidan 保存用户输入编号后对应的菜品的名称,通过名称判断出菜的价格
baicai)
echo "cost is 10$" ;;
baocai)
echo "cost is 15$" ;;
luobo)
echo "cost is 20$" ;;
*)
echo "no number ,please again choice" ;;
esac
done

1、斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0112358132134、……,斐波纳契数列以如下被以递归的方法定义:F0=0F1=1Fn=F(n-1)+F(n-2)n2

写一个函数,求n阶斐波那契数列

解:解题思路,在递归中,一定要记得数列的最开始必须有相对应的具体数值,比如本题: F(0)=0;F(1)=1;F(2)=1,并且后面的F(N)与前面的具体数值是有公式的,我们才可以得出F(n)的具体数值。切记切记

脚本内容如下:

#!/bin/bash
 
tuzhi(){
if [ $1 -eq 0 ];then   #定义出 f0值为 0
echo 0
elif [ $1 -eq 1 -o $1 -eq 2  ] ;then    #定义出 f1 f2值为 1
echo 1  
else
echo  $[$(tuzhi $[$1-2])+$(tuzhi $[$1-1]) ]   #公式
fi
}
tuzhi $1

注解1:比如我们没有 f1 f2的值,能不能算出 fn的值呢?

解:测试为无限报错,

分析:由于fn=f(n-1)+f(n-2),f2=f1+f0,由于f1没有数值,就会无限的计算下去,f1=f(-1)+f(-2)

 

原创文章,作者:linux_root,如若转载,请注明出处:http://www.178linux.com/37589

(0)
linux_rootlinux_root
上一篇 2016-08-19
下一篇 2016-08-19

相关推荐

  • awk中pipe的shell命令调用与close()

        某公司其员工到勤时间表如下, 取名为 arr.dat, 文件中第一栏为员工代号, 第二栏为到达时间. 本示例中将使用该文件为数据示例文件, 1034 7:26 1025 7:27 1101 7:32 1006 7:45 1012 7:46 1028 7:49 1051 7:51 1029 7:57 1042 7…

    Linux干货 2016-11-11
  • Linux的程序包管理,RPM,yum及编译安装简介

    Linux的程序包管理,RPM,yum及编译安装简介   Linux的程序包,指的是ELF格式的二进制应用程序文件所组成的软件包。它一般由二进制文件、库文件、软件配置文件及帮助文件等组成。而对这些包进行管理的工具,主流分为两种,在debian上,用的是apt-get管理deb包;在redhat上,主要用rpm作为软件包管理工具。在这里,我简单的介绍…

    Linux干货 2016-05-29
  • 8.3-特殊权限(作业篇)

    1. 在/data/testdir里创建的新文件自动属于g1组,组g2的成员如: alice能对这些新文件有读写权限,组g3的成员如: tom只能对新文件有读权限,其它用户(不属于,g2,g3)不能访问这个文件夹。 root@localhost ~]# mkdir -p /data/testdir [root…

    Linux干货 2016-08-04
  • openssl、openssh

    openssl 传输层协议:TCP,UDP,SCTPport:进程地址,进程向内核注册使用某端口(独占) 同一主机上的进程间通信:IPC, message queue, shm, semerphor 不同主上的进程间通信:socket cip:port <– –> sip:port cip:55673 <&#8211…

    Linux干货 2017-05-31
  • case条件判断语句

    条件判断: case语句     在shell编程中,对于多分支判断,用if 虽然也可以实现,但有些时候,写起来很麻烦,也不容易代码理解。这个时候,可以考虑case。 case 变量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; … *) 默认分支 ;; esac case语句结构特点如下:…

    Linux干货 2016-08-16
  • keepalived双主模型的实现

    一、简介  keepalived 简介:是服务器高可用的一个重要软件,它的核心组件有vrrp ,stack, checker ,ipvs, warpper, watch dog  它是vrrp协议的实现,原生设计目的为高可用ipvs服务;keepalived能够通过配置文件中定义生成ipvs规则 并能够对RS的健康状态进行检测;vrrp_…

    Linux干货 2014-05-22

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-21 21:19

    shell脚本函数主要是为了实现代码重用及实现模块化编程,故需要多加练习,多写多看优秀脚本。