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