歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

《Linux命令行與shell腳本編程大全》創建函數

《Linux命令行與shell腳本編程大全》創建函數
  基本的腳本函數 創建函數 1.用function關鍵字,後面跟函數名 [plain]  function name {       commands   }   2.函數名後面跟空圓括號,標明正在定義一個函數 [plain]  name() {      commands   }   如果兩個函數的名稱相同,那麼後面的將會覆蓋前面的,而且不會有提示。 使用函數 使用函數名稱即可。必須先定義,再使用。 [plain]  #!/bin/bash   f1() {       echo "this is f1."   }   f1      function f1 {       echo "this is f1111."   }   f1      f2   f2() {       echo "this is f2."   }   這裡首先定義了f1,然後執行,然後又定義了一個f1,再執行。發現第二次執行的是新的f1函數。 接著調用f2,由於此時f2還沒有定義,所以會調用失敗。 [plain]  $ function_test    this is f1.   this is f1111.   ./function_test: line 12: f2: command not found   返回值 bash shell會把函數當做小型腳本,運行結束時會返回一個退出狀態碼。 有三種方式生成函數退出狀態碼 默認退出狀態碼 默認情況下,函數的退出狀態碼是函數中最後一條命令返回的退出狀態碼 函數執行結束後,可以使用$?變量來決定函數的退出狀態碼 [plain]  #!/bin/bash   fun(){       ls nothing       echo $?       echo "done"   }      fun   echo "fun:$?"   由於ls找不到nothing文件或者目錄,所以返回的狀態碼=2 但是fun函數最後的echo執行成功了,所以fun返回的狀態碼=0 [plain]  $ function_test    ls: cannot access nothing: No such file or directory   2   done   fun:0   使用函數默認退出狀態碼是很危險的……   使用return命令 bash shell使用return命令退出函數並返回特定的退出狀態碼。 return命令允許指定一個整數值來定義函數的退出狀態碼 注意:函數一結束就取返回值,退出狀態碼必須在0-255之間。 使用函數輸出 可以將函數的輸出保存到變量中,例如: result=`f1` bash shell不會將read讀取輸入的部分作為 STDOUT   在函數中使用變量 向函數傳遞參數 在腳本中指定函數時,必須將參數和函數放在同一行 然後函數可以用參數環境變量來獲得參數值 在函數中處理變量 函數會用到全局變量和局部變量。 全局變量 在腳本中定義的所有變量均為全局變量。 [plain]  #!/bin/bash   var=1   fun(){       echo "var:"$var       var2=2   }      fun   echo "var2:"$var2   輸出: [plain]  $ function_test    var:1   var2:2   局部變量 函數內部任何變量都可以聲明為局部變量,只需在變量前加local關鍵字即可。 在腳本中定義的局部變量,函數中是無法訪問的。   數組變量和函數 向函數傳遞數組參數 需要將數組變量的值分解成單個值,然後作為函數參數使用。 在函數內部,可以將他們再組成一個數組。 [plain]  #!/bin/bash   array=(a b c d)      fun(){       newarray=($@) #重新組合為數組       echo "newarray is:"${newarray[*]} #打印數組       echo "The 3rd element is:"${newarray[3]}   }      fun ${array[*]} #拆分成多個值傳入   輸出: [plain]  $ function_test    newarray is:a b c d   The 3rd element is:d   如果試圖將數組當做一個參數傳遞給函數,那麼函數只會讀取數組變量的第一個值。 [plain]  #!/bin/bash   array=(a b c d)      fun(){       echo "We have "$#" parameter(s)."       echo "They are: "$@       echo "They are: "$*   }      fun $array   fun函數只認識數組中的第一個元素 [plain]  $ function_test    We have 1 parameter(s).   They are: a   They are: a   從函數返回數組 [plain]  #!/bin/bash   fun(){       local array=(a b c d)       echo ${array[*]}   }      array=(`fun`)   echo ${array[2]}   同返回普通字符串類似,按順序echo輸出,然後放在圓括號裡面即可。   函數遞歸 還是以最簡單的求N的階乘為例: [plain]  #!/bin/bash   fun(){       local result=1;       if [ $1 -eq 1 ]       then           echo 1       else           result=$[$1 * `fun $[$1 - 1]`]           echo $result       fi   }      fun $1   沒有新的知識點,只是不太熟悉罷了 如果使用了``,那麼函數內的echo就不會輸出到STDOUT了,和上面其他的例子一樣。   創建庫 source命令可以在當前的shell上下文中執行命令,而不是創建一個新的shell來執行命令。可以用source命令來在shell腳本中運行庫文件腳本。 source命令等同於點操作符(dot operator) 在一個名叫lib_test的文件中定義一個plus函數 [plain]  #!/bin/bash   plus(){       if [ $# -ne 2 ]       then           echo "I need 2 numbers!"           return       fi       echo $[$1 + $2]   }   然後我們在另一個腳本中使用它 [plain]  #!/bin/bash   . lib_test #腳本路徑   plus $1 $2   使用方法很簡單,這樣就相當於把lib_test導入到當前文件中了 [plain]  $ function_test 4 5   9   在命令行上使用函數 在命令行上創建函數 由於在鍵入命令時shell就會解釋命令,所以可以在命令上直接定義函數。 [plain]  $ plus(){ echo $[$1 + $2]; }   $ plus 3 1   4   注意:要在花括號兩邊加空格,每條命令用分號隔開。 下面的方法看起來更實用一些,效果也更好 [plain]  $ plus(){   > echo $[$1 + $2]   > }   $ plus 4234 23   4257   無須分號和空格。 在.bashrc文件中定義函數 可以直接在這裡定義函數,也可以使用source命令,導入庫 注意,修改了.bashrc之後要重啟才能生效 如果不是每次開機都要執行,那我們還可以在shell中直接使用source,很多時候,這種方式可能更好一些。  
Copyright © Linux教程網 All Rights Reserved