文章目录
- 前言
- 管理函数
- 定义函数
- 交互式环境调用函数
- 查看函数
- 删除函数
- 脚本中的函数
- 定义及使用函数
- 使用函数文件
- 环境函数
- 示例
- 总结
- 友情链接
前言
函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分 函数和shell程序比较相似,区别在于Shell程序在子Shell中运行,而Shell函数在当前Shell中运行。因此在当前Shell中,函数可对shell中变量进行修改
管理函数
函数由两部分组成:函数名和函数体
帮助参看:help function
定义函数
#语法一:
func_name (){
...函数体...
}
#语法二:
function func_name {
...函数体...
}
#语法三:
function func_name () {
...函数体...
}
[root@mdns zaishu]#hi() {
> echo "hello hi"
> }
[root@mdns zaishu]#hi
hello hi
交互式环境调用函数
交互式环境下定义和使用函数
[root@zaishu sh]# hello() {
> echo "helloworld"
> }
[root@zaishu sh]# hello
helloworld
[root@zaishu sh]# function hi {
> echo "hellworld"
> }
[root@zaishu sh]# hi
hellworld
[root@zaishu sh]# function nihao() {
> echo "hellworld"
> }
[root@zaishu sh]# nihao
hellworld
查看函数
#查看当前已定义的函数名
declare -F
#查看当前已定义的函数定义
declare -f
#查看指定当前已定义的函数名
declare -f func_name
#查看当前已定义的函数名定义
declare -F func_name
[root@zaishu sh]# declare -F
declare -f __HOSTNAME
declare -f __SIZE
declare -f __SLAVEURL
declare -f __VOLNAME
....
declare -f __expand_tilde_by_ref
[root@zaishu sh]# declare -f hi
hi ()
{
echo "hellworld"
}
[root@zaishu sh]# declare -F nihao
nihao
删除函数
unset func_name
[root@zaishu sh]# unset nihao
[root@zaishu sh]# declare -F nihao
[root@zaishu sh]#
脚本中的函数
定义及使用函数
函数在使用前必须定义,因此应将函数定义放在脚本开始部分,直至shell首次发现它后才能使用,调用函数仅使用其函数名即可
#! /bin/bash
# for example: add 1 2
add(){
a=$1;
b=$2;
z=$((a+b));
echo "The sum is $z";
}
add $1 $2
[root@zaishu sh]# ./add_num.sh 1 2
The sum is 3
#!/bin/bash
fun1() {
echo "this is fun1()"
}
fun2() {
echo "this is fun2()"
}
fun3() {
echo "this is fun3()"
}
fun4() {
echo "this is fun4()"
}
fun5() {
echo "this is fun4()"
}
fun6() {
echo "this is fun4()"
}
PS3="请选择相应的函数编号(1-7): "
MENU=(
"1:函数fun1"
"2:函数fun2"
"3:函数fun3"
"4:函数fun4"
"5:函数fun5"
"6:函数fun6"
"7:退出"
)
select C in ${MENU[*]}; do
case $REPLY in
1)
fun1
;;
2)
fun2
;;
3)
fun3
;;
4)
fun4
;;
5)
fun5
;;
6)
fun6
;;
7)
break
;;
*) echo "请输出1-7"
;;
esac
done
[root@mdns zaishu]# ./hello.sh
1) 1:函数fun1 3) 3:函数fun3 5) 5:函数fun5 7) 7:退出
2) 2:函数fun2 4) 4:函数fun4 6) 6:函数fun6
请选择相应的函数(1-7): 1
this is fun1()
请选择相应的函数(1-7): 3
this is fun3()
请选择相应的函数(1-7): 8
请输出1-7
请选择相应的函数(1-7): 7
[root@mdns zaishu]#
使用函数文件
可以将常使用的函数存入一个单独的函数文件,然后将函数文件载入shell,再调用函数文件,但最好与相关任务有某种联系,例如:functions一旦函数文件载入shell,就可以在命令行或脚本中调用函数。可以使用delcare -f 或set 命令查看所有定义的函数,其输出列表包括已经载入shell的所有函数若要改动函数,首先用unset命令从shell中删除函数。改动完毕后,再重新载入此文件
实现函数文件的过程:
- 创建函数文件,只存放函数的定义
- 在shell脚本或交互式shell中调用函数文件,格式如下:
. filename 或 source filename
[root@mdns zaishu]#cat funs
#!/bin/bash
fun1(){
echo "this is fun1"
}
fun2(){
echo "this is fun2"
}
[root@mdns zaishu]#source funs # . funs
[root@mdns zaishu]#fun1
this is fun1
[root@mdns zaishu]#fun2
this is fun2
[root@mdns zaishu]#declare -f fun1
fun1 ()
{
echo "this is fun1"
}
[root@mdns zaishu]#declare -f fun2
fun2 ()
{
echo "this is fun2"
}
环境函数
类拟于环境变量,也可以定义环境函数,使子进程也可使用父进程定义的函数定义环境函数:
export -f function_name
declare -xf function_name
定义环境变量:declare -x 变量名
修改环境变量为本地变量: declare +x 环境变量名
示例
查看环境函数:
export -f
declare -xf
定义普通函数
[root@mdns zaishu]#hi() {
> echo "hello hi"
> }
[root@mdns zaishu]#hi
hello hi
[root@mdns zaishu]#declare -f
hi ()
{
echo "hello hi"
}
[root@mdns zaishu]#declare -F
declare -f hi
[root@mdns zaishu]#declare -xf hi
[root@mdns zaishu]#export -f
hi ()
{
echo "hello hi"
}
declare -fx hi
总结
shell当中的函数详解,管理函数,定义函数,交互式环境调用函数,查看删除函数,脚本中的函数,定义和使用函数文件,环境函数和示例。