Quantcast
Channel: CodeSection,代码区,Linux操作系统:Ubuntu_Centos_Debian - CodeSec
Viewing all articles
Browse latest Browse all 11063

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

$
0
0

§ s elect 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 ? ”

v ariable : 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)


Viewing all articles
Browse latest Browse all 11063

Latest Images

Trending Articles