§·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 ? ”
variable:caidan 为变量;
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、斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2)
写一个函数,求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
评论列表(1条)
shell脚本函数主要是为了实现代码重用及实现模块化编程,故需要多加练习,多写多看优秀脚本。