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

相关推荐

  • 操作系统,内核以及硬件之间的关系

    一般我们将计算机系统区分为硬件系统与软件系统构成。 计算机硬件我们可以分成5大组件构成,即: 1)计算器:用于数据计算,如:CPU 2)控制器:控制数据流和指令流,与各个组件之间进行数据交互,并控制协调各个组件之间协同工作,如:主板的南桥,内桥,各个组件自身的独立控制芯片等 3)存储器:用户数据的存放,如:一级/二级等内存芯片;flash芯片 4)输入设备:…

    Linux干货 2016-10-26
  • linux中nmcli命令使用及网络配置

      Red Hat Enterprise Linux 7 与 CentOS 7 中默认的网络服务由 NetworkManager 提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件。  NetworkManager 可以用于以下类型的连接:Ethernet,VLA…

    Linux干货 2016-09-10
  • 0811:脚本练习

    系统信息获取脚本 1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小。 [root@centos7 scripts]#cat systeminfo.sh  #!/usr/bin/bash  server_ip…

    Linux干货 2016-08-22
  • Linux系统发展历史

    一、什么是Linux? Linux是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布。在加上用户空间的应用程序之后,成为Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU通用公共许可证,任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和…

    Linux干货 2016-10-14
  • 全球敏捷运维峰会Gdevops 2017成都站嘉宾主题提前看!

    2017年全球敏捷运维峰会(Gdevops, Global Devops Summit)将于2017年在成都、上海、北京、广州四城全面启动,本次峰会由上海市经济和信息化委员会指导,上海市云计算产业促进中心、DBAplus社群主办,数十家媒体单位共同支持,活动家提供全球敏捷运维峰会在线报名服务。 成都站即将于13日启航,搭车地址:https://www.huo…

    Linux干货 2017-05-11
  • 文本处理(1)

    文本处理工具最全整理上半部

    Linux干货 2018-03-15

评论列表(1条)

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

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