1. 程式人生 > >不同shell檔案中的函式呼叫

不同shell檔案中的函式呼叫

first.sh檔案中新建函式funcFirst

#!/bin/bash
echo $0   #上一行的感嘆號要使用英文字元
funcFirst(){
echo "I am funcFirst()"
echo "function:$FUNCNAME in lineNumber: $LINENO lineNumber2:${BASH_LINENO[1]} Brother: ${FUNCNAME[1]}"
}

second.sh檔案中呼叫first.sh中的funcFirst()函式

first.sh匯入second.sh方法(.first.shsourcefirst.sh../first.sh)

#!/bin/bash
#sh first.sh #不能匯入檔案
#. first.sh
#source first.sh
. ./first.sh
funcFirst
funcSecond(){
funcFirst
}
funcSecond

執行結果

[email protected]:~/shellCommands$bash second.sh
second.sh
I am funcFirst()
function:funcFirst in lineNumber: 5 lineNumber2:0 Brother:main
I am funcFirst()
function:funcFirst in lineNumber: 5 lineNumber2:12 Brother:funcSecond
[email protected]:~/shellCommands$sh second.sh【備註:ubuntu中預設dash
second.sh
I am funcFirst()
second.sh:5: second.sh: Bad substitution
[email protected]:~/shellCommands$.second.sh
bash
I am funcFirst()
function:funcFirst in lineNumber: 5 lineNumber2:617 Brother:source
I am funcFirst()
function:funcFirst in lineNumber: 5 lineNumber2:12 Brother:funcSecond
 [email protected]:~/shellCommands$./second.sh【備註:需要給second.sh加執行許可權chmod+x second.sh
./second.sh
I am funcFirst()
function:funcFirst in lineNumber: 5 lineNumber2:0 Brother: main
I am funcFirst()
function:funcFirst in lineNumber: 5 lineNumber2:10 Brother: funcSecond

結論

1.在一個shell檔案中,呼叫另一個shell檔案的函式,匯入的方法有:(.filename)(sourcefilename)(shfilename測試不能通過)

2.區分source(等價.)sh/bash ./執行shell

3.區分shell內建變數$LINENO,$FUNCNAME($FUNCNAME表示函式本身,$FUNCNAME[1]表示呼叫$FUNCNAME的函式),$BASH_LINENO


相關推薦

不同shell檔案函式呼叫

first.sh檔案中新建函式funcFirst #!/bin/bash echo $0 #上一行的感嘆號要使用英文字元 funcFirst(){ echo "I am funcFirst()"

go 同一個package下不同檔案函式呼叫報未定義問題

程式碼如下:    hello.go檔案package main import "fmt" func hello() { fmt.Print("go =======") }    main.go檔案package main func main() { h

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

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

JS不同檔案函式呼叫

假設條件是:JS(A)要呼叫JS(B)的函式.那麼要滿足以下條件: 1.要保證你所呼叫的JS必須在同一個頁面裡. 也就是JS(A)和JS(B)都要在頁面X裡. 2.要保證你所呼叫的JS先於呼叫者本身被解釋.也就是JS(B)要先於JS(A)被解釋.反映在頁面上,就是JS(B)要寫到JS(A)的前面.

.mm檔案呼叫.m檔案函式的注意事項

 假設你有個函式 int FunA(int a),在一個.m檔案中實現,或者在一個庫檔案中。這裡的函式是單獨的函式,而不是interface的method.  那麼當你從一個.mm檔案中呼叫這個函式的時候,需要注意的一點是:  在一定要將 extern "C" 加在該函式

shell指令碼函式呼叫

函式 : 把一個功能封裝起來,使用時直接呼叫函式名,這樣的指令碼好處:模組化,程式碼可讀性強,擴充套件性方便函式的定義     在shell 中有兩種定義函式的語法格式,分別為:        函式名()        {          命令序列          } 

shell .bashrc函式在其他指令碼無法呼叫問題

在指令碼中需要使用 .bashrc中的函式,無法呼叫時將[ -z "$PS1" ] && return 修改為#[ -z "$PS1" ] && return,然後再呼叫指令碼最前面加s

循序漸進VUE+Element 前端應用開發(22)--- 簡化main.js處理程式碼,抽取過濾器、全域性介面函式、元件註冊等處理邏輯到不同檔案

在我們開發程式碼的時候,一般都喜歡進行一定程度的重構,以達到簡化程式碼、關注點分離、提高程式碼可讀性等等方面的考慮,本篇隨筆介紹在VUE+Element 前端應用開發過程中,實現簡化main.js處理程式碼,抽取過濾器、全域性介面函式、元件註冊等處理邏輯到不同的檔案中做法。 1、main.js處理邏輯 我們知

maprecue將兩類ip分類去重並且輸出到不同目錄檔案

有一份含有兩類ip的資料,根據一個欄位標記來區分,現在需要將去重,兩類Ip分類儲存到不同檔案中,第三類資料捨棄。 主要知識點##: 1、 自定義分割槽:繼承Partitoner類,重寫getPartitoin()方法; 2、多路徑輸出:MultipleOutputs類的

C語言函式呼叫怎麼返回兩個值

在C語言中,函式只能返回一個值,要返回兩個值,可以改換思路,通過其它方式做到。 1 建立陣列,返回指標。 在要返回的兩個值型別相同時,可以用建立陣列的方式,將要返回的值存在陣列中,並返回陣列首地址,這樣就可以實現返回兩個值的效果。 需要注意的是,要返回陣列首地址,那麼返回

browserify檔案函式呼叫報is not defined的原因

舉個例子: a.js var a = 100; module.exports.a = a;   b.js var result = require('./a'); var getA =() => { console.log(result.a); }

C++帶有預設引數的宣告和定義。Qt重寫預設建構函式。C++函式呼叫時實參個數和函式定義時的形參個數不一致時的處理。

1、Qt中自動生成的建構函式 (1)Qt中自動生成的建構函式的宣告 class Chat : public QWidget { Q_OBJECT public: explicit Chat(QWidget *parent = 0); //宣告建構函式,可以帶有初始值“=0”

shell指令碼 列印函式呼叫時間

set sendmoney=1.0 set j=1 while true do     let "j=j+1"     echo "----------j is $j--------------"             time_micro1=$[$(date +%s%N)

【Linux】命令寫在檔案呼叫awk -f

我們在使用awk命令的時候,有時候命令特別長,在終端寫出來格式太亂,難以閱讀,以下是一個將命令寫在檔案中,並使用awk呼叫的具體案例 1.現在有檔案file3.txt,內容如下: 2.ak2.awk指令碼 #列印標題並格式化打印出數量合計 BEGIN { FS="\t" #設定欄位分割符

以太坊智慧合約函式呼叫三種方法(很重要!!!)

外部呼叫: sendTransaction/call 函式呼叫一般分外部呼叫和內部呼叫兩種, 外部呼叫是通過JSON-RPC介面實現對合約函式的呼叫, 有3種呼叫方式: testInstance.testFunc.sendTransaction(); testInstance.testFun

託管C++函式呼叫的雙重轉換(Double Thunking)

 在VC.Net中使用預設設定/clr編譯時,一個託管函式會產生兩個入口點,一個是託管的,供託管程式碼呼叫,另外一個是非託管的,供非託管程式碼呼叫。但是函式地址,特別是虛擬函式指標只能有一個值,所以需要有一個預設的入口。非託管入口點可能是所有呼叫的預設入口(在 Visual

verilog檔案系統函式呼叫

1 $open Integermulti_channel_descriptor= $fopen ( "file_name" ); 返回檔案的多通道描述符,只允許寫資料,最多能開啟31個檔案,最高位保留。 注意:用$fopen開啟檔案會將原來的檔案清空,若要讀資料就用$rea

1 Java程式檔案函式起始行和終止行在程式檔案位置的判定__抽象語法樹方法

應用需求: 實現對BigCloneBench中函式體的克隆檢測,必須標註出起始行號和終止行號。 問題: 給定一個Java檔案,從中提取出每個函式的起始行和終止行。 難點: 這個問題的難點在於,對於Java的解析器而言,其在形成抽象語法樹的過程中,已經對原始碼檔案進行了劃分,然後,形成了對函式的抽象語

Linux檢視.so檔案函式

windows 中檢視程序依賴那個dll,使用depends,linux使用ldd命令。 檢視dll中有哪些匯出函式windows使用dumpbin,linux使用objdump檢視so中有哪些函式。 eg:     objdump -tT libX.so 檢視dll中符號

Linux 下查詢 .so 檔案函式入口

有時候會想知道 .so 檔案中某些資訊,比如版本,函式入口等。strings 命令是個很有用的命令,比如我想知道 libstdc++.so 這個動態庫裡面是否有 refill 函式,可以用 $ strings libstdc++.so | grep ref