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

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

相關推薦

  • 一次簡單的內核編譯(二)

      前言:     此次編譯是繼一次簡單的內核編譯(一)進行操作編譯的,請先查看第一篇再來看此片文章 一、使用busybox代替自己制作的init腳本,實現內核啟動;  1、在這里我們使用靜態編譯busybox,所以需要先安裝glibc-static依賴包,如果不安裝會報錯     2、解…

    Linux干貨 2015-06-01
  • shell腳本編程__bash的配置

    shell腳本編程__bash的配置   一、bash的配置文件:   按生效范圍劃分,存在兩類:     全局配置: /etc/profile /etc/profile.d/*.sh /etc/bashrc    個人配置: ~/.bash_profile ~/.bashrc 二、she…

    Linux干貨 2016-08-26
  • 第六周學習總結

    寫在前面 在互聯網+的時代,網絡顯得越發重要,如果現在你一頓不吃飯可能還沒事但是一個小時沒網絡,估計你都要瘋了。那么網絡到底是個啥呢?看不見又摸不著。拿著一臺電腦怎么和網絡建立連接呢?那么下面要講解的內容或許可以給你解決個大概。 閑聊網絡 如果讓你修一棟房子你會一層一層的往上修,并且規劃好一層用來開商鋪,二層用來開超市,上面一層用來干嘛等等,其實網絡也是一樣…

    2018-01-08
  • LVS_DR配置

    DR : 192.168.29.150 VIP:192.168.29.100 RS1: 192.168.29.110 VIP:192.168.29.100 RS2:192.168.29.120 VIP:192.168.29.100 RS 配置 1 配置VIP [root@local ~]# ifconfig lo:0 192.168.29.100 netma…

    2017-06-30
  • Linux基礎知識之壓縮、解壓、歸檔工具

    壓縮、解壓、歸檔工具     壓縮格式:gz,bz2,xz,zip,Z 壓縮算法不同,壓縮比也會不同     1.compress/uncompress (.Z) compress [-dfvcVr] [-b maxbits] [file …] -d: 解壓縮,相當于 -c: 結果輸出至標準輸出, 不刪除原…

    Linux干貨 2016-08-19
  • 安裝包管理

       軟件包管理 軟件的運行和編譯 ABI 由于window和linux不兼容 linux是ELF window 是PE 對應的內核解析方式不同,可以用虛擬化 API 只程序與程序的公用的接口,相互調用方式 程序源代碼 –>預處理–>編譯–>匯編–>鏈接 預處理只會引…

    Linux干貨 2017-04-24

評論列表(1條)

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

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

欧美性久久久久