【Shell】函數(shù)

函數(shù)

1、語法

函數(shù)定義語法如下:

[ function ] funname [()] {
    action;
    [return int;]
}

說明 :

  1. 函數(shù)定義時(shí),function 關(guān)鍵字可有可無。

  2. 函數(shù)返回值 - return 返回函數(shù)返回值,返回值類型只能為整數(shù)(0-255),如果函數(shù)的返回值超過255,超出時(shí)值將為除以256取余。如果不加 return 語句,shell 默認(rèn)將以最后一條命令的運(yùn)行結(jié)果,作為函數(shù)返回值。

  3. 函數(shù)返回值在調(diào)用該函數(shù)后通過 $? 來獲得。

  4. 所有函數(shù)在使用前必須定義。這意味著必須將函數(shù)放在腳本開始部分,直至 shell 解釋器首次發(fā)現(xiàn)它時(shí),才可以使用。調(diào)用函數(shù)僅使用其函數(shù)名即可。

    #!/usr/bin/env bash
    
    f1
    
    f1(){
     echo "f11"
    }
    # 這樣子 就會(huì)報(bào)錯(cuò)
    

注意:當(dāng)一個(gè)shell腳本里面定義了兩個(gè)相同名的函數(shù),最終的結(jié)果只會(huì)顯示最后一個(gè)。

2、無參數(shù)

示例:

無返回值

#!/usr/bin/env bash
# function 可省略
function calc(){
    echo " Hello World"
}

calc
echo "the result is: $?" # $? 獲取 calc 函數(shù)返回值

# 返回結(jié)果:
#Hello World
#the result is: 0

有返回值

#!/usr/bin/env bash
test(){
    read -p " 請輸入一個(gè)數(shù)字: " num
    return $[$num*2]
}
test
echo "this function test  return value is " $?

# 返回結(jié)果:
# 請輸入一個(gè)數(shù)字: 10
# this function test  return value is  20

# 返回結(jié)果:
# 請輸入一個(gè)數(shù)字: 1000
# this function test  return value is  208

3、函數(shù)傳參

在Shell中,調(diào)用函數(shù)時(shí)可以向其傳遞參數(shù)。在函數(shù)體內(nèi)部,通過 $n的形式來獲取參數(shù)的值,例如,$1表示第一個(gè)參數(shù),$2表示第二個(gè)參數(shù)…即使用位置參數(shù)來實(shí)現(xiàn)參數(shù)傳遞。
#!/usr/bin/env bash

add(){
    let sum=$1+$2
    return $sum
}

add $1 $2

echo "this function add  return value is " $?

# 返回結(jié)果
# ./add.sh 1 3
# this function add  return value is  4

4、函數(shù)變量的作用范圍

  1. 函數(shù)在shell腳本中僅在當(dāng)前shell環(huán)境中有效

  2. Shell腳本中變量默認(rèn)全局有效

  3. 將變量限定在函數(shù)內(nèi)部使用local命令

    1. 函數(shù)內(nèi)部變量通過local來實(shí)現(xiàn)
    2. 通過定義myfun函數(shù),在其內(nèi)部設(shè)置局部變量i
    3. 函數(shù)內(nèi)部和外部分別賦值,進(jìn)行結(jié)果驗(yàn)證。

ps:

**全局變量代表整體可以使用**

**局部變量代表的是全局變量里面可以使用其中一部分**

示例

#!/usr/bin/env bash

test(){
    local i
    i=6
    echo $i
}

i=8
test
echo " i value is " $i

# 返回結(jié)果:
# 6
# i value is  8

如果把 local 去除掉,則返回的結(jié)果如下所示:

#6
#i value is  6

5、位置參數(shù)

位置參數(shù)是在調(diào)用一個(gè)函數(shù)并傳給它參數(shù)時(shí)創(chuàng)建的變量。

位置參數(shù)變量表:

變量 描述
$0 腳本名稱
$1...$9 第1個(gè)參數(shù)到地9個(gè)參數(shù)列表
${10}...${n} 第 10 個(gè)到 N 個(gè)參數(shù)列表
$* or $@ 除了$0 外的所有位置參數(shù)
$# 不包括$0在內(nèi)的位置參數(shù)的個(gè)數(shù)
$FUNCNAME 函數(shù)名稱(僅在函數(shù)內(nèi)部有值)

示例

#!/usr/bin/env bash

test(){
    let sum=$1+$2
    echo "腳本名稱" $0
    echo "函數(shù)名稱" $FUNCNAME
    echo "除了$0外的所有位置參數(shù)" $@
    echo "除了$0外的所有位置參數(shù)" $*
    echo "不包括$0在內(nèi)的位置參數(shù)的個(gè)數(shù)" $#
    return $num
}

test $1 $2
echo "sum value is " $?


# 輸出結(jié)果
# 腳本名稱 ./func.sh
# 函數(shù)名稱 test
# 除了./func.sh外的所有位置參數(shù) 1 3
# 除了./func.sh外的所有位置參數(shù) 1 3
# 不包括./func.sh在內(nèi)的位置參數(shù)的個(gè)數(shù) 2
# sum value is  0

6、函數(shù)處理參數(shù)

特殊字符用來處理參數(shù)

變量 描述
$# 返回參數(shù)個(gè)數(shù)
$* 返回所有參數(shù)
? 腳本運(yùn)行的當(dāng)前進(jìn)程 ID 號(hào)
$! 后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的 ID 號(hào)
$@ 返回所有參數(shù)
$- 返回 Shell 使用的當(dāng)前選項(xiàng),與 set 命令功能相同。
$? 函數(shù)返回值

示例

#!/usr/bin/env bash

test(){
    echo "腳本運(yùn)行的當(dāng)前進(jìn)程 ID 號(hào):" ?
    echo "后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的 ID 號(hào):" $!
    echo "Shell 使用的當(dāng)前選項(xiàng):$-"
}

test

# 輸出結(jié)果
# 腳本運(yùn)行的當(dāng)前進(jìn)程 ID 號(hào): 7
# 后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的 ID 號(hào):
# Shell 使用的當(dāng)前選項(xiàng):hB
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 來源: Linux命令行與shell腳本編程大全 博客地址,推薦電腦點(diǎn) 內(nèi)容 基本的腳本函數(shù)返回值在函數(shù)中使用變量...
    王詩翔閱讀 2,541評(píng)論 0 3
  • day61-linux-shell函數(shù) 1.函數(shù)基本概述 什么是shell函數(shù)函數(shù)是一對命令的合集,用來完成特定功...
    流星花娪閱讀 295評(píng)論 0 0
  • 摘要:Linux,Shell 函數(shù)語法 函數(shù)就是將一組重復(fù)使用Shell語句組合起來一起調(diào)用,這樣可以省略代碼量,...
    xiaogp閱讀 1,135評(píng)論 0 5
  • linux shell 可以用戶定義函數(shù),然后在shell腳本中可以隨便調(diào)用。 shell中函數(shù)的定義格式如下: ...
    起源矢量閱讀 202評(píng)論 0 3
  • Shell 函數(shù) linux shell 可以用戶定義函數(shù),然后在shell腳本中可以隨便調(diào)用。 shell中函數(shù)...
    Joyner2018閱讀 165評(píng)論 0 0

友情鏈接更多精彩內(nèi)容