亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

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

2020-07-27 19:12:25
字體:
來源:轉載
供稿:網友

說起函數調用,相信大家也不會陌生,然而對于初學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的第一個字符;
$$:是腳本運行的當前進程ID號;
$?:是顯示最后命令的退出狀態,0表示沒有錯誤,其他表示有錯誤;

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

三、作用域問題

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品激情在线| 亚洲精品视频在线观看视频| 欧美丝袜一区二区三区| 亚洲国产精品久久久久秋霞不卡| 一本大道久久加勒比香蕉| 91人人爽人人爽人人精88v| 精品日本美女福利在线观看| 91在线观看免费观看| 亚洲精品中文字| 欧美黑人性视频| 欧美日韩亚洲系列| 亚洲成人激情小说| 日韩高清有码在线| 最近2019中文字幕在线高清| 亚洲精品自拍第一页| 日韩激情视频在线播放| 国产91免费观看| 欧美在线视频免费| 国产欧美精品一区二区三区介绍| 日韩在线视频导航| 欧美在线国产精品| 日韩久久精品电影| 国内精品400部情侣激情| 日韩精品免费在线视频| 国产精品∨欧美精品v日韩精品| 青青在线视频一区二区三区| 中文字幕日韩欧美在线视频| 欧美在线视频在线播放完整版免费观看| 亚洲free嫩bbb| 欧美日韩成人黄色| 日本一本a高清免费不卡| 久久av在线看| 最近2019年好看中文字幕视频| 亚洲丁香婷深爱综合| 亚洲欧美日韩网| 欧美人交a欧美精品| 欧美午夜性色大片在线观看| 国产欧美欧洲在线观看| 国产美女扒开尿口久久久| 久久99精品久久久久久青青91| 日韩欧美在线字幕| 欧美一区二区三区精品电影| 在线观看精品国产视频| 久久久之久亚州精品露出| 欧美成人在线网站| 亚洲另类xxxx| 日韩国产精品亚洲а∨天堂免| 欧美理论电影网| 中文字幕久久久| 欧美精品www在线观看| 久久久久久美女| 成人在线激情视频| 日韩视频精品在线| 精品亚洲一区二区| 国产精品视频自在线| 精品亚洲va在线va天堂资源站| 俺去啦;欧美日韩| 欧美成人国产va精品日本一级| 欧美亚洲视频一区二区| 国产91免费看片| 北条麻妃一区二区在线观看| 日韩成人在线电影网| xxx成人少妇69| 日韩中文在线视频| 久久精品99国产精品酒店日本| 欧美午夜片欧美片在线观看| 91av在线免费观看| 欧美日韩国产第一页| 欧美精品久久一区二区| 欧美激情一区二区三区久久久| 久久免费视频在线| 亚洲在线第一页| 95av在线视频| 国产精品88a∨| 欧美电影在线播放| 最好看的2019的中文字幕视频| 亚洲福利视频网站| 浅井舞香一区二区| 国产亚洲视频在线观看| 国产亚洲精品久久久久久牛牛| 欧美在线观看网站| 国产中文字幕日韩| 欧美日韩在线另类| 国产亚洲欧美日韩一区二区| 精品久久久久久久久久| 中文字幕日韩精品有码视频| 欧美精品18videos性欧| 欧美小视频在线| 欧美成人免费全部观看天天性色| 欧美日韩国产精品一区二区不卡中文| 国产精品香蕉在线观看| 日韩欧美有码在线| 国产99久久精品一区二区| 成人春色激情网| 91精品国产免费久久久久久| 亚洲91精品在线| 日本亚洲欧美成人| 国产精品美女网站| 国产精品91在线观看| 欧美综合国产精品久久丁香| 97超碰蝌蚪网人人做人人爽| 欧美黑人国产人伦爽爽爽| 欧日韩不卡在线视频| 欧美一级片在线播放| 亚洲乱码国产乱码精品精天堂| 日韩av资源在线播放| 91爱爱小视频k| 精品国产乱码久久久久久婷婷| 91色视频在线观看| 尤物九九久久国产精品的特点| 欧美一级成年大片在线观看| 欧美精品精品精品精品免费| 欧美在线亚洲一区| 亚洲日本成人女熟在线观看| 在线视频免费一区二区| 久热99视频在线观看| 亚洲精品美女网站| 2025国产精品视频| 亚洲成人av在线播放| 欧美成aaa人片在线观看蜜臀| 欧美性xxxx在线播放| 欧美激情精品久久久久久变态| 日韩电影中文字幕在线观看| 亚洲乱亚洲乱妇无码| 国产精品高潮粉嫩av| 国产精品高潮视频| 国产精品久久久久久久久久久不卡| 热99精品只有里视频精品| www.xxxx欧美| 国产精品久久久久77777| 国产亚洲成精品久久| 亚洲男子天堂网| 午夜精品福利在线观看| 精品福利免费观看| 久久精品亚洲热| 色樱桃影院亚洲精品影院| 97久久精品人人澡人人爽缅北| 久久免费成人精品视频| 久久综合伊人77777尤物| 精品福利在线视频| 欧美成人精品影院| 国产成人小视频在线观看| 久久久之久亚州精品露出| 国产精品视频导航| 97视频在线观看亚洲| 久久91精品国产91久久跳| 日韩欧美黄色动漫| 伊人久久免费视频| 欧美日韩激情小视频| 成人国产精品一区| 97视频在线免费观看| 亚洲男人天堂2019| 国产精品av免费在线观看| 国产精品av电影| 日韩男女性生活视频| 久久九九热免费视频| 91精品视频在线| 国产精品久久久久久久av大片| 国产视频精品久久久| 91精品国产高清自在线| 国产综合视频在线观看| 日韩美女视频在线观看| 欧美激情久久久久| 久久精品视频播放|