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、斐波那契數列又稱黃金分割數列,因數學家列昂納多·斐波那契以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:0、11、2、3、5、8、13、2134、……,斐波納契數列以如下被以遞歸的方法定義:F0=0,F1=1,Fn=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.www58058.com/37589

(0)
linux_rootlinux_root
上一篇 2016-08-19 11:36
下一篇 2016-08-19 11:50

相關推薦

  • Linux發展史

    一、簡單的說: 一個名叫Linus Torvalds的芬蘭大學生想要了解Intel的新CPU386。他認為比較好的學習方法是自己編寫一個操作系統的內核。出于這種目的,加上他對當時Unix 變種版本(即Minix)對于80386類機器的脆弱支持十分不滿,他決定要開發出一個全功能的、支持POSIX標準的、類Unix的操作系統內核,該系統吸收了BSD和S…

    Linux干貨 2016-10-20
  • N25-第十周博客作業

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) 內核空間的啟動流程 一. POST 加電自檢 在加電之后,智能設備所運行的內部存儲的一系列檢測程序集合??s寫為POST。這些檢測程序在軟件加載到硬件上運行之前對硬件的基本完整性加以驗證。 用于實現POST的代碼在主板上ROM(CMOS)芯片上。 二. Boot Sequence(BI…

    Linux干貨 2017-03-25
  • 邏輯卷管理—LVM

    邏輯卷管理—LVM   LVM:Logical  Volume  Manager        使用軟件方式來組織一個或多個底層硬件設備為一個抽象的邏輯設備。 1、查看分區情況: 2、創建分區:(更改分區類型為8e:Linux LVM) 3、創建分區成功: 5、創建物理…

    Linux干貨 2016-09-01
  • MySQL流程函數

    MySQL流程函數 IF(value,x y) 如果value是真,返回x,否則返回y MariaDB [learn]> INSERT INTO salary(sal) VALUES (1000),(2000),(3000),(4000),(5000),(6000),(NULL); Query OK, 7 rows affected (0.06 sec…

    Linux干貨 2017-05-02
  • 堡壘機-麒麟開源堡壘機內置SSL VPN使用指南

      一、安裝 (一)確定服務器的操作系統位數 Windws xp、2000、2003系統,在我的電腦屬性里,可以很明顯地看到標識。如果沒有注明是64位的,那么默認就是32位的 Windows 7 系統在控制面板,點擊系統,在系統類型里,標注有操作系統位數 (二)安裝VPN客戶端 VPN客戶端分為32位系統和64位系統二…

    Linux干貨 2016-05-29
  • 第二周作業

    1 linux 常見的文件管理命令都有哪些?其常用的使用方法。 ls 文件列出命令   常見選項  -l 顯示長文本信息          -d 顯示當前目錄信息          -a 顯示所有文件信息     &nb…

    Linux干貨 2016-09-26

評論列表(1條)

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

    shell腳本函數主要是為了實現代碼重用及實現模塊化編程,故需要多加練習,多寫多看優秀腳本。

欧美性久久久久