bash編程函數select語句的使用

£select      

      select循環主要用于創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,并顯示PS3提示符,等待用戶的輸入,用戶輸入菜單列表中的某個數字,執行相應的命令,用戶輸入被保存在變量REPLY中。

select是個無限循環,因此要記住用break命令退出循環,或者用exit直接退出腳本,也可以使用ctrl+c退出循環

 

select語句結構:

    select 變量 in 選項1 選項2 ;do

    break

    done

 

    #!/bin/sh

    PS3="what is you favourite OS?:"

    select i  in "Linux" "Windows" "Mac";do

    echo "you have select $REPLY"

    break

    done

1.jpg

 

selectif選擇語句的使用

    #!/bin/bash

    #

    PS3="please input a color:"

    select  color  in   red  white   black  ; do

         if [[ "$color" == "red" ]];then

         echo  " is  good"         

         elif [[ "$color" ==  "white"  ]] ;then

                   echo   "is ok "

         elif [[ "$color"  == "black" ]];then

                   echo "is god"

         fi

    break

    done

2.jpg

 

selectcase

    #!/bin/bash

    #

    PS3="please input a color:"

    select  color  in   “red”  “white”   “black”  ; do

         case $color in

         red)

         echo “is goog”

         ;;

         white)

         echo “is ok”

         ;;

         black)

         echo “is god”

         ;;

         *)

         exit

         esac

         done

 

    break

    done

 

3.jpg

 

 

函數

       函數function是由若干條shell命令組成的語句塊,實現代碼重用和模塊化編程,最大化的代碼重用和最小化的代碼冗余,它與shell程序形式上是相似的,不同的是他不是一個單獨的進程,不能獨立運行,而是shell程序的一部分。函數是

函數和shell程序的差異

shell程序在子shell中運行,而shell函數在當前shell中運行,因此在當前shell中,函數可以shell中變量進行修改

函數由兩部分組成:函數名和函數體

  語法一:

      function  f_name {

   函數體

      }

  語法二:

     function f_name () {

  函數體

     }

 語法三:

   f_name (){

  函數體

  }

函數有兩種返回值:

  函數的執行結果返回值:

(1)       使用echoprintf命令進行輸出

(2)       函數體中調用命令的輸出結果

函數的退出碼狀態:

(1)       取決于函數中執行的最后一條命令的退出狀態碼

(2)       自定義退出狀態碼,其格式為:

return 從函數中返回,用最后狀態命令決定返回值

return 0 無錯誤返回

return 1-255 有錯誤返回

 

 

  函數使用前必須定義,因此應將函數定義放在腳本開始部分,直至shell首次發現它后才能使用

調用時直接使用函數名即可,如下例子

 

利用函數來顯示當前系統的主機名

 1.jpg

利用函數顯示用的uidshell類型

 2.jpg

  有時候我們會經常進行某些操作,每次重新寫一遍太耗時,有了函數我們就可將要執行的操作定義在函數中,這樣在我們想執行某些操作的時候,直接來調用函數來完成操作,如果是多個函數,那么可以定義在一個文件當中,然后將函數載入shell,文件名可任意取,但最好跟某些任務有某種關聯,這樣用的時候也好找一些。

  一旦函數文件載入shell,就可以在命令或腳本中調用函數。可以使用set命令查看所有定義的函數,其輸出列表包括已經載入shell的所有函數

  若要改動函數,首先用unst命令從shell中刪除函數,改動完畢后,再重新載入此文件

 

載入函數的方法

      . filename source filename兩者的區別是前者里定義的變量不會加載到環境變量中,而后者恰恰相反

 

刪除函數的方法

  使用unset function_name跟刪除變量一樣

5.png

 

£函數參數

  傳遞參數給函數:調用函數時,在函數名后面以空白分隔給定參數列表即可;例如“testfunc arg1 arg2 …

在函數體中當中,可使用$1, $2, …調用這些參數;還可以使用$@, $*, $#等特殊變量,注意:如果函數中有局部變量,如果其名稱同本地變量,使用局部變量

 

 

    1、斐波那契數列又稱黃金分割數列,因數學家列昂納多·斐波那契以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:0、11、2、3、5、813、21、34、……,斐波納契數列以如下被以遞歸的方法定義:F0=0,F1=1Fn=F(n-1)+F(n-2)n2

寫一個函數,求n階斐波那契數列

    #!/bin/bash

    #

    fab() {

         if [ $1 -eq 1 ] ;then

         echo -n  "1 "

         elif  [ $1 -eq 1 ] ;then

                   echo  -n "1 "

         else

                   echo  -n "$[$(fab $[$1-1]) + $(fab $[$1-2] ) ] "

        fi

    }

    for i in {1..10};do

         fab $i

    echo

    done

 

6.png

 

 

       2、漢諾塔(又稱河內塔)問題是源于印度一個古老傳說。大梵天創造世界的時候做了三根金剛石柱子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤。

利用函數,實現N片盤的漢諾塔的移動步驟

    #!/bin/bash
    #
    step=0
    move (){
    let step++
    echo "$step:  move disk $1   $2 —–> $3"
    }
    hanoi(){
        if [ $1 -eq  1 ];then
            move  $1   $2  $4
        else
    hanoi "$[$1-1]" $2 $4 $3
    move $1  $2  $4
    hanoi  "$[$1-1]" $3  $2  $4
    fi
    }
    read -p "please input the  number of plates: "  number
    hanoi $number A B C

QQ截圖20160823104247.jpg

原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/38082

(0)
fszxxxksfszxxxks
上一篇 2016-08-24 10:13
下一篇 2016-08-24 10:25

相關推薦

  • Linux 基礎 (1)

    2017-07-13
  • linux 權限相關知識

    linux day 6     用戶、組和權限 1.Linux用戶:Username/UID         管理員:root, 0         普通用戶:1-65535             …

    Linux干貨 2016-08-08
  • 馬哥教育網絡班20期+第6周課程練習

    請詳細總結vim編輯器的使用并完成以下練習題 vim三種模式: 用法:vim [option…] FILE 編輯模式:     字符跳轉:         h:向左移動一個字符     &…

    系統運維 2016-07-22
  • 創建一個簡易的Linux

      目標:   為CentOS 6添加一塊新硬件,提供兩個主分區;    (1) 為硬盤新建兩個主分區;并為其安裝grub;    (2) 為硬盤的第一個主分區提供內核和ramdisk文件; 為第二個 分區提供rootfs;    (3) 為rootfs提供bash、ls、cat程序及所依賴的庫文件;    (4) 為grub提供配置文件;    …

    Linux干貨 2016-12-30
  • find和grep命令練習

                                    find和grep命令練習 1、顯示當前系統上root,fedora,或user1用戶的默認shell; ~]# cat /etc/pa…

    Linux干貨 2016-10-23
  • iptables的一個小文檔

    iptables:    iptables五表五鏈        felter表            INPUT   …

    Linux干貨 2017-04-30
欧美性久久久久