一、Shell函数
1、语法格式
(1)简单语法
fun_name(){
指令。。。
return n
}
(2)规范语法
function fun_name(){
指令。。。
return n
}
2、函数的执行
(1)方法一:直接执行函数名
a、格式
fun_name
b、注意事项
(i)不要带小括号。
(ii)函数定义和函数体必须在要执行的函数名的前面,因为shell的执行是从上向下执行的。
(2)方法二:带参数执行
a、格式
fun_name 参数1 参数2 。。。
b、注意事项
(i)在函数体中可以使用位置参数($1, n,KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲,*, @)做为函数的参数。
(ii)父脚本的参数则临时被函数的参数所掩盖或变隐藏。
(iii)位置参数$0比较特殊,仍然表示父脚本的名称。
(iv)当函数执行完成后,原来的命令行参数会恢复。
(v)return的功能和工作方式与shell中的exit相同,用于跳出函数。
(vi)return会返回一个退出给调用的程序。
(vii)在函数体中使用exit会跳出shell,终止整个shell脚本。
3、示例
(1)示例1:基本调用的注意事项
a、只定义函数,不调用,则无结果。
vi /services/scripts/myFun01.sh
#!/bin/sh
myFun01(){
echo "I amLinux"
}
sh /services/scripts/myFun01.sh
#<–结果为空,没有任何输出
b、函数调用在前,定义在后,则报错commandnot found。
vi /services/scripts/myFun01.sh
#!/bin/sh
myFun01
myFun01(){
echo "I amLinux"
}
sh /services/scripts/myFun01.sh
myFun01.sh: line 2: myFun01: command not found
c、调用函数加小括号,则报错syntaxerror: unexpected end of file。
vi /services/scripts/myFun01.sh
#!/bin/sh
myFun01(){
echo "I amLinux"
}
myFun01()
sh /services/scripts/myFun01.sh
myFun01.sh: line 6: syntax error: unexpected end of file
d、正确调用。
vi /services/scripts/myFun01.sh
#!/bin/sh
myFun01(){
echo "I amLinux"
}
myFun01
sh /services/scripts/myFun01.sh
I am Linux
(2)示例2:函数定义和函数执行分离于不同脚本
vi /services/scripts/fun_defined.sh
#!/bin/sh
myFun01(){
echo "I ammyFun01"
}
myFun02(){
echo "I ammyFun02"
}
vi /services/scripts/fun_exec.sh
#!/bin/sh
[ -f fun_defined.sh ] && . ./fun_defined.sh || exit 1
myFun01
myFun02
sh fun_exec.sh
I am myFun01
I am myFun02
(3)示例3:函数传参
vi /services/scripts/myFun03.sh
#!/bin/sh
myFun03(){
echo "I am Linux。You are $1"
}
myFun03 abc
sh /services/scripts/myFun03.sh