最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell中的函數(shù)、函數(shù)定義、作用域問題介紹

 更新時間:2014年11月28日 10:39:36   投稿:junjie  
這篇文章主要介紹了Shell中的函數(shù)、函數(shù)定義、作用域問題介紹,本文講解了Shell中函數(shù)的定義、自定義函數(shù)的例子、作用域問題等內(nèi)容,需要的朋友可以參考下

說起函數(shù)調(diào)用,相信大家也不會陌生,然而對于初學(xué)Shell的我來說,Shell中函數(shù)調(diào)用方式卻有點讓我不太習(xí)慣,自己也走了不少的彎路,因為傳遞參數(shù)時出了一個很“自然”的錯誤,也讓我吃了不少的苦頭,所以總結(jié)一下Shell中函數(shù)的調(diào)用方法。

一、Shell中函數(shù)的定義

為了方便程序和管理和模塊化并減少代碼的重復(fù),函數(shù)的確是一個好東西。而Shell中函數(shù)的定義有兩種方法,如下:

復(fù)制代碼 代碼如下:

function fname()
{
    statements;
}


復(fù)制代碼 代碼如下:

fname()
{
    statements;
}

注意,()內(nèi)是沒有參數(shù)的,它并不像C語言那樣,在()里可以有參數(shù)。

那大家可能就郁悶了,函數(shù)調(diào)用或多或少總是會需要一些參數(shù),那么這些參數(shù)要怎么傳遞進來呢?其實參數(shù)傳遞方式為:fname;(不需要傳遞參數(shù))或fname agr1 arg2(需要傳遞兩個參數(shù));

二、自定義函數(shù)的例子

不知道大家的情況如何,反正一開始我就覺得很別扭,因為在C語言中,例如我定義一個函數(shù)int cmp(int a, int b),那么我就會在函數(shù)中使用到函數(shù)頭中聲明的變量a和b,而在Shell中卻沒有定義參數(shù),那我的函數(shù)又需要用到這兩個參數(shù),怎么辦好呢?下面就用一個例子來說明好了。

復(fù)制代碼 代碼如下:

#! /bin/bash 
# Filename:LoopPrint.sh 
 
function LoopPrint() 

    count=0; 
    while [ $count -lt $1 ]; 
    do 
    echo $count; 
    let ++count; 
    sleep 1; 
    done 
    return 0; 

 
read -p "Please input the times of print you want: " n; 
LoopPrint $n; 

先來說說這個程序的功能吧,就是輸入一個數(shù)字n,然后從0開始每隔1秒輸入一個數(shù)字,直到輸出n-1為止。首先,程序會要求你輸入一個數(shù)學(xué),然后調(diào)用函數(shù)來進行輸出的功能。

注意注釋1的那一句,里面有一個變量$1,大家應(yīng)該還記得調(diào)用函數(shù)時參數(shù)的傳遞方式,即fname agr1 arg2,這里的$1就是表示第一個參數(shù),依此類推,$2就是第二個參數(shù),$3就是第3個參數(shù),$n就是表示第n個參數(shù)。

所以$1就是變量n的值。這樣說大家懂了吧!

補充一下,就是:

$0:是腳本本身的名字;
$#:是傳給腳本的參數(shù)個數(shù);
$@:是傳給腳本的所有參數(shù)的列表,即被擴展為"$1" "$2" "$3"等;
$*:是以一個單字符串顯示所有向腳本傳遞的參數(shù),與位置變量不同,參數(shù)可超過9個,即被擴展成"$1c$2c$3",其中c是IFS的第一個字符;
$$:是腳本運行的當(dāng)前進程ID號;
$?:是顯示最后命令的退出狀態(tài),0表示沒有錯誤,其他表示有錯誤;

特別注意,傳遞參數(shù)時,(這個例子中)一定要寫成LoopPrint $n;而不能寫成LoopPrint n。為什么?例如你輸入的是20,則n的值($n)為20,前者表示的是把n的值,即20傳遞給函數(shù)LoopPrint,而后者則表示把字符n傳遞給函數(shù)LoopPrint。這點與在靜態(tài)語言中的函數(shù)參數(shù)傳遞是很不同的,因為在Shell中變量的使用并不需要先定義,所以要使用變量,讓Shell知道它是一個變量,并要傳遞它的值時,就是用$n,而不能直接用n,否則只把n當(dāng)作一個字符來處理,而不是一個變量。

三、作用域問題

函數(shù)的作用域與C/C++語言中的作用約束是一樣的,函數(shù)的定義一定要出現(xiàn)在函數(shù)的調(diào)用語句之前,但是有一點跟C/C++中不一樣的就是變量的作用域問題,經(jīng)過本人的試驗,在注釋1的語句改為while [ $count -lt $n ];也是可行的,即函數(shù)可以使用本文件中出現(xiàn)的任何變量,但是本人還是建議使用上面例子中的方法,即while [ $count -lt $1 ],并且不要隨意使用函數(shù)中的變量之外的變量,因為你并不一定知道你調(diào)用函數(shù)時函數(shù)外有什么變量存在也不知道它的值是什么,也不能保證別人在使用你的函數(shù)時會傳遞你在函數(shù)中使用到的變量名,如這里的n,別人在使用時可能傳遞的就是他自己定義的變量,如Count等。

相關(guān)文章

  • 詳解在dotnet core實現(xiàn)類似crontab的定時任務(wù)

    詳解在dotnet core實現(xiàn)類似crontab的定時任務(wù)

    這篇文章主要介紹了在dotnet core實現(xiàn)類似crontab的定時任務(wù),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • 分享shell編程中的幾個小技巧

    分享shell編程中的幾個小技巧

    分享shell編程中的幾個小技巧,學(xué)習(xí)shell編程的朋友可以看下
    2013-02-02
  • Linux命令之jar命令使用示例

    Linux命令之jar命令使用示例

    這篇文章主要介紹了Linux命令之jar命令,War包和Jar包有不同的用途和適用場景,開發(fā)人員需要根據(jù)實際情況選擇適合的歸檔文件類型,需要的朋友可以參考下
    2023-06-06
  • 用shell命令讀取與輸出數(shù)據(jù)的代碼

    用shell命令讀取與輸出數(shù)據(jù)的代碼

    本文為大家介紹使用shell命令進行讀取與輸出數(shù)據(jù)的方法,其中涉及了文件輸出、重定向、管道等相關(guān)知識,有興趣的朋友可以參考下
    2013-02-02
  • Linux常用高頻命令

    Linux常用高頻命令

    這篇文章介紹了Linux常用的高頻命令,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 每天一個linux命令 head命令

    每天一個linux命令 head命令

    這篇文章主要為大家詳細介紹了一個linux命令:head命令,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 在 SHELL 腳本中調(diào)用另一個 SHELL 腳本的方法(報錯: go:not found)

    在 SHELL 腳本中調(diào)用另一個 SHELL 腳本的方法(報錯: go

    在Linux平臺上開發(fā),經(jīng)常會在console(控制臺)上執(zhí)行另外一個腳本文件,經(jīng)常用的方法有:./my.sh 或 source my.sh 或 . my.sh;這三種方法有什么不同呢?這篇文章主要介紹了在 SHELL 腳本中調(diào)用另一個 SHELL 腳本的方法(報錯: go:not found),需要的朋友可以參考下
    2023-08-08
  • shell命令行參數(shù)用法簡介

    shell命令行參數(shù)用法簡介

    本文介紹了shell命令行參數(shù)的用法,對于普通腳本語言諸如perl python等,寫一個腳本程序,包裝命令行參數(shù)時,一般都是用getopt之類的;c語言也類似
    2014-04-04
  • shell腳本學(xué)習(xí)指南[一](Arnold Robbins & Nelson H.F. Beebe著)

    shell腳本學(xué)習(xí)指南[一](Arnold Robbins & Nelson H

    這篇文章主要介紹了shell腳本學(xué)習(xí)指南[一]Arnold Robbins & Nelson H.F. Beebe著,需要的朋友可以參考下
    2014-02-02
  • linux 網(wǎng)卡配置詳解及實例

    linux 網(wǎng)卡配置詳解及實例

    這篇文章主要介紹了linux 網(wǎng)卡配置詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評論

广西| 桐柏县| 平塘县| 鸡西市| 仙居县| 邵武市| 揭阳市| 东乡| 永善县| 长岭县| 江永县| 西充县| 宁都县| 宜兴市| 江门市| 石屏县| 嵩明县| 正安县| 阿拉善左旗| 翼城县| 沧源| 黄浦区| 桐庐县| 额尔古纳市| 乾安县| 皮山县| 金塔县| 建宁县| 突泉县| 刚察县| 洛宁县| 阿拉善右旗| 忻州市| 台东市| 普兰县| 遂昌县| 大荔县| 和龙市| 屏山县| 曲沃县| 天门市|