溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

shell函數(shù)怎么用

發(fā)布時間:2021-10-14 10:37:09 來源:億速云 閱讀:147 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關(guān)shell函數(shù)怎么用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

函數(shù)可以讓我們將一個復(fù)雜功能劃分成若干模塊,讓程序結(jié)構(gòu)更加清晰,代碼重復(fù)利用率更高。像其他編程語言一樣,Shell 也支持函數(shù)。Shell 函數(shù)必須先定義后使用。Shell 函數(shù)的定義格式如下:

[function] fun() {
    list of commands
    [ return value ]
}

說明:

  1. 可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數(shù),function關(guān)鍵字和()必須有其中一個。

  2. 返回值,可以顯示加:return 返回,如果不加,將以最后一條命令運行結(jié)果,作為返回值。 return后跟數(shù)值n(0-255)。

  3. 參數(shù),()內(nèi)是沒有參數(shù)的,它并不像C語言那樣,在()里可以有參數(shù)。那大家可能就郁悶了,函數(shù)調(diào)用或多或少總是會需要一些參數(shù),那么這些參數(shù)要怎么傳遞進(jìn)來呢?其實參數(shù)傳遞方式為:fname;(不需要傳遞參數(shù))或fname agr1 arg2(需要傳遞兩個參數(shù));

Shell 函數(shù)返回值只能是整數(shù),一般用來表示函數(shù)執(zhí)行成功與否,0表示成功,其他值表示失敗。如果 return 其他數(shù)據(jù),比如一個字符串,往往會得到錯誤提示:“numeric argument required”。如果一定要讓函數(shù)返回字符串,那么可以先定義一個變量,用來接收函數(shù)的計算結(jié)果,腳本在需要的時候訪問這個變量來獲得函數(shù)返回值。shell函數(shù)返回值有三種方式:

  1. 直接return通過$?來接收返回值;

  2. 定義全局變量,通過全局變量來接收的方式,使用函數(shù)返回值。

  3. echo的方式,通過標(biāo)準(zhǔn)輸出來返回。

#!/bin/bash

function sum()
{
    if [ $# != 2 ]
    then
        echo "arg num != 2"
        return 0
    fi
    return $(( $1 + $2 ))    
}
sum 5 6   #調(diào)用函數(shù)只需要給出函數(shù)名,不需要加括號。
echo "5+6=$?" #-->5+6=11; 函數(shù)返回值在調(diào)用該函數(shù)后通過 $? 來獲得。
sum 100 200 
echo "100+200=$?"   #-->100+200=44,return后跟數(shù)值n(0-255)。300-256=44

#向函數(shù)傳遞數(shù)組
a=(1 2 3 4)
sum(){
    local sum=0;
    for v in $@
    do
        sum=$[sum+v]   #sum=$(($sum+$v));
    done
    echo $sum;  #-->10
}   
sum ${a[@]}
 
#像刪除變量一樣,刪除函數(shù)也可以使用 unset 命令,不過要加上 .f 選項, 
#$unset -f function_name
#如果你希望直接從終端調(diào)用函數(shù),可以將函數(shù)定義在主目錄下的 .profile 文件,這樣每次登錄后,在命令提示符后面輸入函數(shù)名字就可以立即調(diào)用。
  • $0:是腳本本身的名字;

  • $#:是傳給腳本的參數(shù)個數(shù);

  • $@:是傳給腳本的所有參數(shù)的列表,即被擴(kuò)展為"$1" "$2" "$3"等;

  • $*:是以一個單字符串顯示所有向腳本傳遞的參數(shù),與位置變量不同,參數(shù)可超過9個,即被擴(kuò)展成"$1c$2c$3",其中c是IFS的第一個字符;

  • $$:是腳本運行的當(dāng)前進(jìn)程ID號;

  • $?:是顯示最后命令的退出狀態(tài),0表示沒有錯誤,其他表示有錯誤;

看完上述內(nèi)容,你們對shell函數(shù)怎么用有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI