1. 程式人生 > >(14)shell 函式以及函式引數

(14)shell 函式以及函式引數

函式可以讓我們將一個複雜功能劃分成若干模組,讓程式結構更加清晰,程式碼重複利用率更高。
Shell 函式必須先定義後使用。

1、Shell 函式的定義格式

function_name () {
    list of commands
    [ return value ]
}

如果你願意,也可以在函式名前加上關鍵字 function
function function_name () {
    list of commands
    [ return value ]
}

注意:

  1. 函式返回值,可以顯式增加return語句;如果不加,會將最後一條命令執行結果作為返回值。
  2. Shell 函式返回值只能是整數,一般用來表示函式執行成功與否,0表示成功,其他值表示失敗。
  3. 如果 return 其他資料,比如一個字串,往往會得到錯誤提示:“numeric argument required”。

2、函式返回字串的技巧

如果一定要讓函式返回字串,那麼可以先定義一個變數,用來接收函式的計算結果,指令碼在需要的時候訪問這個變數來獲得函式返回值。

#!/bin/bash
# Define your function here
Hello () {
   echo "Url is http://see.xidian.edu.cn/cpp/shell/"
}
# Invoke your function
Hello

呼叫函式只需要給出函式名,不需要加括號。

一個帶有return語句的函式:

#!/bin/bash
funWithReturn(){
    echo "The function is to get the sum of two numbers..."
    echo -n "Input first number: "
    read aNum
    echo -n "Input another number: "
    read anotherNum
    echo "The two numbers are $aNum and $anotherNum !"
    return
$(($aNum+$anotherNum)) } funWithReturn # Capture value returnd by last command ret=$? echo "The sum of two numbers is $ret !" $? 可以獲取上一個命令的退出狀態,在這裡也就是函式funWithReturn最後退出狀態。

3、函式巢狀

#!/bin/bash
# Calling one function from another
number_one () {
   echo "Url_1 is http://see.xidian.edu.cn/cpp/shell/"
   number_two
}
number_two () {
   echo "Url_2 is http://see.xidian.edu.cn/cpp/u/xitong/"
}
number_one

指令碼直接呼叫number_one,在number_one中呼叫number_two

執行結果:
Url_1 is http://see.xidian.edu.cn/cpp/shell/
Url_2 is http://see.xidian.edu.cn/cpp/u/xitong/

4、刪除函式

像刪除變數一樣,刪除函式也可以使用 unset 命令,不過要加上 .f 選項,如下所示:

$unset .f function_name

如果你希望直接從終端呼叫函式,可以將函式定義在主目錄下的 .profile 檔案,這樣每次登入後,在命令提示符後面輸入函式名字就可以立即呼叫。

5、帶引數函式

在Shell中,呼叫函式時可以向其傳遞引數。
在函式體內部,通過 n1表示第一個引數,$2表示第二個引數…

帶引數的函式示例:

#!/bin/bash
funWithParam(){
    echo "The value of the first parameter is $1 !"
    echo "The value of the second parameter is $2 !"
    echo "The value of the tenth parameter is $10 !"
    echo "The value of the tenth parameter is ${10} !"
    echo "The value of the eleventh parameter is ${11} !"
    echo "The amount of the parameters is $# !"  # 引數個數
    echo "The string of the parameters is $* !"  # 傳遞給函式的所有引數
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

The value of the first parameter is 1 !
The value of the second parameter is 2 !
The value of the tenth parameter is 10 !
The value of the tenth parameter is 34 !
The value of the eleventh parameter is 73 !
The amount of the parameters is 12 !
The string of the parameters is 1 2 3 4 5 6 7 8 9 34 73 !"

注意,10{10}。當n>=10時,需要使用${n}來獲取引數。

6、幾個特殊變數用來處理引數

特殊變數 說明

  1. $# 傳遞給函式的引數個數。
  2. $* 顯示所有傳遞給函式的引數。
  3. [email protected] 與 (2)相同,但是略有區別,請檢視Shell特殊變數。
  4. $? 函式的返回值。

相關推薦

14shell 函式以及函式引數

函式可以讓我們將一個複雜功能劃分成若干模組,讓程式結構更加清晰,程式碼重複利用率更高。 Shell 函式必須先定義後使用。 1、Shell 函式的定義格式 function_name () { list of commands [ re

Linux命令列與shell指令碼14--在函式中使用陣列

陣列變數和函式 傳遞陣列給函式 function testit(){ local new_array; new_array=(`echo [email

Shell入門Shell函式

Shell 函式 linux shell 可以使用者定義函式,然後在shell指令碼中可以隨便呼叫。 shell中函式的定義格式如下: [ function ] funname [()] { action; [return int;] } 說明:

Python Numpy 100題實驗:線性代數函式以及fromfunction函式

本次的主要內容有: 對線性代數函式例如逆矩陣函式,特徵值以及特徵值向量函式等的應用 fromfunction()函式的使用 求解給定矩陣的逆矩陣並驗證 a = np.random.randint(1, 5, (3,3)) # 注意這樣的話要多試幾次,因為隨

C++筆記容器(vector)作為函式引數如何傳參

一、大致以下型別 void 函式名( vector< int> obj ); void 函式名( vector< int>* pobj ); void

資料庫學習筆記和小練習14函式

函式分為系統函式和自定義函式。 一、系統函式 1 文字處理函式 select lower(Sdept) as Sdept_lower from student order by Sdept; 常用舉例: lower() 函式將文字轉化為小寫。 upper()  -> 

C++中lower_bound函式和upper_bound函式 以及 sort(引數

STL中關於二分查詢的函式有三個lower_bound 、upper_bound 、binary_search 。這三個函式都運用於有序區間(當然這也是運用二分查詢的前提),下面記錄一下這兩個函式。 ForwardIter lower_bound(ForwardIter

Shell指令碼-Shell中的變數、函式及read命令

在Shell指令碼中,通常需要在Shell命令使用其他資料來處理資訊。這就需要使用變數來實現,變數可以將資訊臨時儲存在Shell執行環境中,以便和指令碼中的其他命令一起使用。變數的型別系統變數:系統變數通常寫在/etc/profile或/etc/profile.d中,對所有使

5.3Python函式3:不定長位置引數&不定長關鍵字引數

@不定長位置引數 使用*arg_name定義的位置引數,表示任意多個位置引數; Python標準庫中習慣使用*args來命名不定長位置引數,當然我們可以自定義這個名稱; 不定長位置引數的型別為元組; 在下面的例子中的*likesBy,表示點贊者,顯然點贊

王亟亟的Python學習之路-dictionary,set,函式函式引數

-dictionary -set -函式 -函式引數 dictionary 鍵-值(key-value)儲存,具有極快的查詢速度。為什麼反覆提起查詢速度,因為如果你一個用list只是為了獲取裡面X元素內容的話效能是相對比較查的,極力推薦

Hi3359AV100 NNIE開發1-RFCN demo LoadModel函式引數解析

  之後隨筆將更多筆墨著重於NNIE開發系列,下文是關於Hi3359AV100 NNIE開發(1)-RFCN NNIE LoadModel函式與引數解析,通過對LoadModel函式引數的解析,能夠很好理解.wk檔案的具體內容,為方便為對其他不同模型.wk載入時如何進行修改給出參照。   在RFCN 

機器學習基礎—— 交叉熵代價函式cross-entropy error

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Spring MVC控制器獲取頁面請求引數以及將控制器資料傳遞給頁面和實現重定向的方式

首先做好環境配置 在mvc.xml裡進行配置   1.開啟元件掃描   2.開啟基於mvc的標註   3.配置試圖處理器 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www

react 入門-建立元件2無狀態功能函式

前面說的是通過繼承React.Component建立React元件。 還可以通過無狀態的功能函式構造React元件。 舉例 <!DOCTYPE html> <html> <head> <meta charset="utf-8"&

指標————傳遞指標給函式

#include <iostream> using namespace std; void getSeconds(int *par); double getAverage(int *arr, int size);//入參是指標,本質上是要求傳一個地址過來 int main () {

Vue.js12- 霸道的render函式渲染元件

index.html <div id="app"> <p>這是index.html</p> </div> index.js // 匯入全的vue // import Vue from 'vue/dist/vue.js' //

深入理解JavaScript系列2:揭祕命名函式表示式 命名函式表示式 函式表示式 函式宣告

還有一種函式表示式不太常見,就是被括號括住的(function foo(){}),他是表示式的原因是因為括號 ()是一個分組操作符,它的內部只能包含表示式,我們來看幾個例子: 函式宣告只能出現在程式或函式體內。 如果function foo(){}是作為賦值表示式的一部分的

27進階:函式

函式的五種宣告方式       1.具名函式      function f(x,y){         return x+y     }   &nbs

【整理】python學習筆記5-- pygame庫的函式和方法整理

PYGAME的方法和官方文件查詢 官方文件 http://www.pygame.org/docs/   模組 簡介 pygame.BufferProxy An array protocol view

常用統計分析函式

(1)sum函式,統計總合 按照月份,統計每個地區的總收入 Sql程式碼 select earnmonth, area, sum(personincome) from earnings group by earnmonth,area; 檢視結果如下: (2)rollup函式 按照月份