1. 程式人生 > >linux shell 自定義函式(定義、返回值、變數作用域)介紹

linux shell 自定義函式(定義、返回值、變數作用域)介紹

inux shell 可以使用者定義函式,然後在shell指令碼中可以隨便呼叫。下面說說它的定義方法,以及呼叫需要注意那些事項。

一、定義shell函式(define function)

語法:

[ function ] funname [()]

{

    action;

    [return int;]

}

說明:

1、可以帶function fun()  定義,也可以直接fun() 定義,不帶任何引數。

2、引數返回,可以顯示加:return 返回,如果不加,將以最後一條命令執行結果,作為返回值。 return後跟數值n(0-255

例項(testfun1.sh):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #!/bin/sh fSum 3 2; function fSum() { echo $1,$2; return $(($1+$2)); } fSum 5 7; total=$(fSum 3 2); echo $total,$?; sh testfun1.sh testfun1.sh: line 3: fSum: command not found 5,7 3,2
1 5

從上面這個例子我們可以得到幾點結論:

1、必須在呼叫函式地方之前,宣告函式,shell指令碼是逐行執行。不會像其它語言一樣先預編譯。一次必須在使用函式前先宣告函式。

2、total=$(fSum 3 2);  通過這種呼叫方法,我們清楚知道,在shell 中 單括號裡面,可以是:命令語句。 因此,我們可以將shell中函式,看作是定義一個新的命令,它是命令,因此 各個輸入引數直接用 空格分隔。 一次,命令裡面獲得引數方法可以通過:$0…$n得到。 $0代表函式本身。

3、函式返回值,只能通過$? 系統變數獲得,直接通過=,獲得是空值。其實,我們按照上面一條理解,知道函式是一個命令,在shell獲得命令返回值,都需要通過$?獲得。

二、函式作用域,變數作用範圍

先我們看一個例項(testfun2.sh ):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 #!/bin/sh echo $(uname); declare num=1000; uname() { echo "test!"; ((num++)); return 100; } testvar() { local num=10; ((num++)); echo $num; } uname; echo $? echo $num; testvar; echo $num; sh testfun2.sh Linux test! 100 1001 11 1001

我們一起來分析下上面這個例項,可以得到如下結論:

1、定義函式可以與系統命令相同,說明shell搜尋命令時候,首先會在當前的shell檔案定義好的地方查詢,找到直接執行。

2、需要獲得函式值:通過$?獲得

3、如果需要傳出其它型別函式值,可以在函式呼叫之前,定義變數(這個就是全域性變數)。在函式內部就可以直接修改,然後在執行函式就可以讀出修改過的值。

4、如果需要定義自己變數,可以在函式中定義:local 變數=值 ,這時變數就是內部變數,它的修改,不會影響函式外部相同變數的值 。

相關推薦

linux shell 定義函式(定義返回變數作用介紹

inux shell 可以使用者定義函式,然後在shell指令碼中可以隨便呼叫。下面說說它的定義方法,以及呼叫需要注意那些事項。 一、定義shell函式(define function) 語法: [ function ] funname [()] {     act

linux shell定義函數(定義返回變量作用)介紹

shel 自己 lai cell define ber article clas ner linux shell 可以用戶定義函數,然後在shell腳本中可以隨便調用。下面說說它的定義方法,以及調用需要註意那些事項。 一、定義shell函數(define function)

sqlserver中編寫定義函式中的返回問題

寫了一個獲取符號間隔字串的函式,原先程式碼如下 CREATE FUNCTION funGetSubStr (  -- Add the parameters for the function here  @StrParams nvarchar(4000),  @char ch

javascript學習筆記(二定義函數調用函數參數返回局部和全局變量

兩個 cnblogs bsp 結果 value ava ase com 調用 定義函數、調用函數、參數、返回值 關鍵字function定義函數,格式如下: function 函數名(){ 函數體 } 調用函數、參數、返回值的規則和c語言規則類似。 1 <!DOC

Python基礎筆記_Day06_python函式引數返回巢狀

Day06_python函式引數、返回值、巢狀   06.01_Python語言基礎(函式概述)(掌握) 06.02_Python語言基礎(函式的定義和呼叫)(掌握) 06.03_Python語言基礎(函式的引數)(掌握) 06.04_Python語言基礎(呼叫函式注意

shell指令碼中函式呼叫的返回,以及退出狀態問題

     最近開始學習shell指令碼,由於之前沒怎麼接觸過linux和shell,所以一切從頭開始學起      shell指令碼編寫方法與程式設計類似,只是趨向於面向物件程式設計(個人理解,如果錯誤,麻煩各位老鳥指出)。其他關於shell指令碼到底是怎麼樣的一個東西大家

python學習筆記12(裝飾器函式變數作用

裝飾器、偏函式、變數作用域 裝飾器 定義: 是一個閉包,把一個函式當做引數,返回一個替代版的函式 本質: 就是一個返回函式的函式 示例: #簡單的裝飾器 def func1(): #定義了一個函式 print("sunck is a good man") #希望在不改

C#呼叫C++ 平臺呼叫P/Invoke 結構體--輸入輸出引數返回返出結構體陣列作為引數【五】

【1】結構體作為輸入輸出引數 C++程式碼: typedef struct _testStru1 { int iVal; char cVal; __int64 llVal; }testS

Linux shell指令碼中執行命令結果賦變數&&echo輸出變數是否包含換行符的問題

Linux shell指令碼中執行命令結果賦值給變數&&echo輸出變數是否包含換行符的問題 echo $ret 和 echo "$ret" 區別: 如果是echo $ret,輸出結果為一行,沒有換行符 如果是echo "$ret",輸出結果為多行,有換行符

javascript基礎:函式傳遞引數的方式引數陣列變數範圍(變數作用

一、函式的2種引數傳遞方式 (1)傳值:把變數的值傳入函式,函式不會另外分配記憶體儲存值,所以不會改變原始值,一般適用於傳入 數字、布林值、字串。 (2)傳地址:把變數儲存的記憶體地址傳入,如果在函式

golang基礎-函式變數定義type命名返回可變參defer匿名

函式是一個變數型別 package main import("fmt" ) func main() { c := add fmt.Println(c) sum := c(10, 20)

Python 函式函式定義函式的引數返回函式巢狀

  demo.py(函式定義): # say_hello() # 不能在定義函式之前呼叫函式 # Python 直譯器知道下方定義了一個函式 def say_hello(): """函式的說明文件""" print("hello 1") print("

Python函式定義匿名函式函式的引數函式呼叫引數傳遞變數作用遞迴呼叫

Python函式: 函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。 Python提供了許多內建函式,比如print()。你也可以自己建立函式,這被叫做使用者自定義函式。 定義函式: 在Python中,定義一個函式要使用def語句,依次寫出函式名、

Python 語言學習 第七篇:函式1(定義呼叫和變數作用

函式是把一些語句集合在一起的程式結構,用於把複雜的流程細分成不同的元件,能夠減少程式碼的冗餘、程式碼的複用和修改程式碼的代價。 函式可以0個、1個或多個引數,向函式傳遞引數,可以控制函式的流程。函式還可以返回程式碼執行的結果,從技術上講,任何函式都要返回結果,一個沒有返回值的函式會自動返回none物件。如果

mogodb 的定義函式定義及引用

在學習MONGODB 遇到以下問題: 函式 getNextSequence 生成序列號,官方方法: 建立一張表,記錄某一個表的_ID 當前值。後面呼叫此函式生成下一個序列號, 在測試此函式時,遇到以下問題: (url:http://docs.mongodb.org/manu

linux shell 中陣列的定義和for迴圈遍歷

linux shell中的語法和普通程式語言 c/c++  java 的不太一樣,平時用的不多,所以總是記不住,寫指令碼才會去查怎麼用。今天突然被問到陣列怎麼去遍歷。平時寫shell指令碼也經常遍歷陣列,但是一下沒答上來,被鄙視了。所以平時學習還是好好總結吧,不能每次都問度

在js中如何獲取到你點選的元素的html物件屬性以及定義的屬性

前言:記錄自己在工作中遇到的小問題,積少成多!因為是新手,有什麼寫的不好的地方還希望大家能夠指出來。有什麼更好的解決方法也希望大家能提出來,一起交流分享!(小弟在這裡先謝謝大家) 直接上程式碼: 1、jsp頁面程式碼 <p>首先定義兩個按鈕,新增一些常規屬性ty

HTML中的函式使用基礎(函式定義函式呼叫,函式引數,函式返回,巢狀函式,遞迴函式變數作用,內建函式,其他定義函式的方法

HTML中的函式使用基礎 函式實質上是一個類似於單獨的邏輯單元的JavaScript程式碼,使用函式可以使程式碼更為簡潔,提供重用性,在JavaScript中,大約有95以上的程式碼是包含在函式中的,由此可見,函式在JavaScript中地位相當重要。 1、函式定義 在

linux shell指令碼對未定義變數的判斷以及if的用法

環境 作業系統:win10 虛擬機器:centos7 需求 因為公司有個指令碼,是用於啟動程式的,但是每次啟動都要手動做如下兩個操作: ①先查詢之前的程序ID ②殺死之前的,在啟動新了 時間長了弄得我很煩躁,所以就琢磨下,把上面的的操作一起整合

Js中arguments的使用函式呼叫變數作用函式作為引數傳入函式作為返回

1,arguments是一個比較特別的物件,每個函式中都有一個arguments,它接收函式傳入的引數,以陣列的形式存放在 arguments,可遍歷 //1,需求:求任意數的最大值 function getMax(){ var Max = arguments