(一) 什麼是函式
完成特定功能的**片段(塊),在shell中定義函式可以使用**模組化,便於復用**。函式必須先定義才能使用
(二) 如何定義函式
方法1: function 函式名
方法2: 函式名()
(三) 函式呼叫
3.1 怎麼給函式傳參
引數不用先定義,函式括號裡面沒有形參。指令碼呼叫時候傳位置引數,函式呼叫去獲取傳遞給指令碼的引數即可。當然不止這一種方式。**都是靈活的,想辦法讓函式獲取引數都可。
函式在另外乙個指令碼的話就在需要呼叫函式的指令碼中執行一下函式所在指令碼檔案即可。注意是在當前shell執行,即 . 或 source
3.2 怎麼使用函式返回值
3.2.1 如果沒有return , 那麼函式的返回值是函式最後一條命令執行後返回的狀態碼。乙個介於 0~255 之間的整數,其中只有 0 表示成功,其它值都表示失敗。獲取方式是 呼叫函式後 用 $? 獲取。如下面的例子:
3.2.2 用熱return來定義返回值:return 後面不能跟表示式,只能跟乙個值。例如不能用 return let 2*$num 只能用
return $[2*$num]; 另外 return 也只能返回0-255之間的整數。 如果 2*$num 大於255 那麼得到的結果也是錯誤的。獲取方式同樣也是在呼叫函式後,用 $? 獲取函式返回值。如下面例子:
3.2.3 那麼如何獲取乙個函式裡面的計算結果呢?比如這個例子中我要得到不在0-255範圍內的2*$num 的值。別慌,肯定是有辦法的啦。繼續往下看。通常我們會有兩種方式來獲取準確的函式返回值。
第一種: 在shell中定義乙個全域性變數,在函式中把計算結果賦給這個全域性變數,呼叫函式後再去獲取這個全域性變數的值即可;
比如下面的例子:
第二種: 再函式內部使用 echo 或 printf 將結果輸出。隨便怎麼呼叫獲取。直接呼叫或者通過命令替換或者將命令替換後執行結果賦值給乙個變數都可以。
Shell學習15天(for迴圈) 05day
for迴圈本身後面的變數是以空格或者tab分割的,如果是空行,就會忽略空行把空行當成乙個空格。反正for迴圈根本就不會理睬空行。視若無睹。就算指定了for迴圈按照回車分割,也不會理睬空行。例項一 for迴圈批量主機ping 深測.以下 其實很簡單,但是有乙個地方需要特別說明,以前沒有這樣使用過.1 ...
機器學習裡面的基函式 機器學習 核函式基本概念
機器學習 核函式基本概念 多項式空間和多項式核函式 定義1.1 核或正定核設x 是nr中的乙個子集,稱定義在xx 上的函式zx 是核函式,如果存在乙個從x到 hilbert空間h 的對映hxx 1.1 使得對任意的xz xzxz x 1.2 都成立。其中 表示hilbert空間h 中的內積。定義1....
Shell學習15天(grep詳解) 09day
grep,egrep,fgrep 列印匹配給定模式的行 總覽 synopsis grep options pattern file.grep options e pattern f file file.描述 description grep 搜尋以 file 命名的檔案輸入 或者是標準輸入,如果沒有...