欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell中的函數(shù)、函數(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)用方式卻有點(diǎn)讓我不太習(xí)慣,自己也走了不少的彎路,因?yàn)閭鬟f參數(shù)時(shí)出了一個(gè)很“自然”的錯(cuò)誤,也讓我吃了不少的苦頭,所以總結(jié)一下Shell中函數(shù)的調(diào)用方法。

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

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

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

function fname()
{
    statements;
}


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

fname()
{
    statements;
}

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

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

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

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

復(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; 

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

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

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

補(bǔ)充一下,就是:

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

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

三、作用域問題

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

相關(guān)文章

  • 使用shell腳本一鍵部署LNMP架構(gòu)的方法

    使用shell腳本一鍵部署LNMP架構(gòu)的方法

    這篇文章主要介紹了使用shell腳本一鍵部署LNMP架構(gòu)的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Linux下的fdisk指令用法場景分析

    Linux下的fdisk指令用法場景分析

    在Linux系統(tǒng)中,對磁盤進(jìn)行分區(qū)是管理和利用磁盤空間的重要任務(wù)之一,本篇將以通俗易懂的方式,詳細(xì)介紹fdisk指令的前世今生、功能、用法和應(yīng)用場景,幫助讀者全面了解fdisk指令,并掌握其在磁盤管理和問題排查方面的應(yīng)用,需要的朋友可以參考下
    2024-01-01
  • 詳解Linux下的sudo及其配置文件/etc/sudoers的詳細(xì)配置

    詳解Linux下的sudo及其配置文件/etc/sudoers的詳細(xì)配置

    這篇文章主要介紹了詳解Linux下的sudo及其配置文件/etc/sudoers的詳細(xì)配置的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • shell腳本實(shí)現(xiàn)ssh自動登錄功能分享

    shell腳本實(shí)現(xiàn)ssh自動登錄功能分享

    mac下沒有找到好用的類似secureCRT,就自己寫了個(gè)自動登錄的腳本,分享一下,如果是新浪的,就基本不用修改代碼就直接能用
    2014-04-04
  • Ubuntu服務(wù)器配置apache2.4的限速功能shell腳本分享

    Ubuntu服務(wù)器配置apache2.4的限速功能shell腳本分享

    這篇文章主要介紹了Ubuntu服務(wù)器配置apache2.4的限速功能shell腳本分享,本文直接給出腳本實(shí)現(xiàn)代碼,代碼相關(guān)原理都寫在了注釋里,需要的朋友可以參考下
    2015-03-03
  • linux中nohup和后臺運(yùn)行進(jìn)程查看及終止

    linux中nohup和后臺運(yùn)行進(jìn)程查看及終止

    今天給大家介紹linux中nohup和后臺運(yùn)行進(jìn)程查看及終止的操作命令,大家都知道nohup用于不掛斷地運(yùn)行命令,語法也很簡單,需要的朋友可以參考下本文吧
    2021-06-06
  • Linux內(nèi)核鏈表實(shí)現(xiàn)過程

    Linux內(nèi)核鏈表實(shí)現(xiàn)過程

    本文講解Linux內(nèi)核鏈表實(shí)現(xiàn)的過程,說了鏈表的定義及初始化宏定義、插入操作和刪除操作等內(nèi)容,詳細(xì)看下面
    2013-11-11
  • Linux 中 CURL常用命令詳解

    Linux 中 CURL常用命令詳解

    這篇文章主要介紹了Linux 中 CURL常用命令詳解,需要的朋友可以參考下
    2015-10-10
  • 監(jiān)控服務(wù)器swap并重啟php的Shell腳本

    監(jiān)控服務(wù)器swap并重啟php的Shell腳本

    有一臺服務(wù)器老是交換扇區(qū)占滿然后失去響應(yīng),很煩,因?yàn)榧虞d了以前別人寫的一個(gè)php擴(kuò)展,效率低,資源占用大,悲劇的是現(xiàn)在還沒有可以替換的東西
    2014-03-03
  • linux下socket編程常用頭文件(推薦)

    linux下socket編程常用頭文件(推薦)

    這篇文章主要介紹了linux下socket編程常用頭文件,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-10-10

最新評論