国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Shell中的函數、函數定義、作用域問題介紹

2019-10-26 18:43:07
字體:
來源:轉載
供稿:網友

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

一、Shell中函數的定義

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


代碼如下:
fname()
{
    statements;
}

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

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

二、自定義函數的例子

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

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

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

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

補充一下,就是:

$0:是腳本本身的名字;
$#:是傳給腳本的參數個數;
$@:是傳給腳本的所有參數的列表,即被擴展為"$1" "$2" "$3"等;
$*:是以一個單字符串顯示所有向腳本傳遞的參數,與位置變量不同,參數可超過9個,即被擴展成"$1c$2c$3",其中c是IFS的第一個字符;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 察哈| 宜川县| 上林县| 化州市| 柘城县| 彰化市| 隆昌县| 峨山| 定陶县| 武清区| 江都市| 兴山县| 固始县| 望江县| 阜宁县| 新化县| 湄潭县| 临高县| 进贤县| 依安县| 察雅县| 康平县| 长顺县| 安吉县| 天津市| 巫溪县| 伊金霍洛旗| 临汾市| 峡江县| 库车县| 清河县| 永济市| 牡丹江市| 井研县| 凌云县| 双牌县| 灵台县| 苍溪县| 石家庄市| 余庆县| 凤冈县|