§·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.www58058.com/37589
shell腳本函數主要是為了實現代碼重用及實現模塊化編程,故需要多加練習,多寫多看優秀腳本。