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.sh或sourcefirst.sh或../first.sh)
#!/bin/bash
#sh first.sh #不能导入文件
#. first.sh
#source first.sh
. ./first.sh
funcFirst
funcSecond(){
funcFirst } funcSecond
执行结果
hyc@hyc-csu:~/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
hyc@hyc-csu:~/shellCommands$sh second.sh【备注:ubuntu中默认dash】
second.sh
I am funcFirst()
second.sh:5: second.sh: Bad substitution
hyc@hyc-csu:~/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
hyc@hyc-csu:~/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