shell脚本(function函数)
function函数1. 函数function的作用2. 函数的定义3. 函数参数4. 在函数里用本地变量1. 函数function的作用函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运 行,而是shell程序的一部分,定义函数只对当前的会话窗口有效,如果再打开一个窗口再定义另外一个函数,
·
function函数
1. 函数function的作用
-
函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程。
-
它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运 行,而是shell程序的一部分,定义函数只对当前的会话窗口有效,如果再打开一个窗口再定义另外一个函数,就对另一个窗口有效,两者互不影响。
-
函数和shell程序比较相似,区别在于以下两种:
- Shell程序在子Shell中运行。
- 而Shell函数在当前Shell中运行,因此在当前Shell中,函数可以对shell中变量进行修改。
2. 函数的定义
- 函数由两部分组成:函数名和函数体
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
function iu(){
echo "hehe"
}
iu // 如果函数定义了,但其没有调用则不会执行。这里使用名字调用
[root@localhost ~]#bash -x test.sh
+ iu
+ echo hehe
hehe
[root@localhost ~]#
3. 函数参数
- 当传递参数时
[root@localhost ~]#cat test.sh
#!/bin/bash
function my_service(){
case $1 in
"start")
echo "start $2"
;;
"stop")
echo "stop $2"
;;
"restart")
echo "restart $2"
;;
"status")
echo "status $2"
;;
*)
echo "Usage: service $2 start|stop|restart|status"
;;
esac
}
my_service jjyy httpd //传递第一个参数$1,要么是start/stop/restart/status,否则打印最后一行内容,这里给的是jjyy,则一定会打印最后一行。传递第二个参数为httpd
[root@localhost ~]#bash -x test.sh
+ my_service jjyy httpd
+ case $1 in
+ echo 'Usage: service httpd start|stop|restart|status'
Usage: service httpd start|stop|restart|status
[root@localhost ~]#
- 当没有传递参数时
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
function my_service(){
case $1 in
"start")
echo "start $2"
;;
"stop")
echo "stop $2"
;;
"restart")
echo "restart $2"
;;
"status")
echo "status $2"
;;
*)
echo "Usage: service $2 start|stop|restart|status"
;;
esac
}
my_service
[root@localhost ~]#bash -x test.sh
+ my_service
+ case $1 in
+ echo 'Usage: service start|stop|restart|status'
Usage: service start|stop|restart|status //没有传递参数时,$1匹配的*,则打印的Usage。$2没有匹配任何东西
[root@localhost ~]#
4. 在函数里用本地变量
- 当不调用a=10时,则不打印10
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
function test(){
local a=10
echo $a
}
echo $a #此$a跟a=10不是一码事
[root@localhost ~]#bash +x test.sh
[root@localhost ~]#
- 在脚本前加a=20时,则打印20
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
a=20
function test(){
local a=10
echo $a
}
echo $a
[root@localhost ~]#bash -x test.sh
+ a=20
+ echo 20
20
[root@localhost ~]#
- 当调用函数时,则打印20
[root@localhost ~]#vim test.sh
[root@localhost ~]#bash -x test.sh
+ a=20
+ test
+ local a=10
+ echo 20
20
[root@localhost ~]#cat test.sh
#!/bin/bash
a=20
function test(){
local a=10 #此a=10只能在函数里用,与上面的a=20毫不相干
}
test #调用此函数
echo $a
[root@localhost ~]#
- 当在函数里添加$a时,则先打印10,后打印20
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
a=20
function test(){
local a=10
echo $a
}
test #先调用函数则会先执行函数里的$a,所以先打印10.后执行下面的$a则后打印20
echo $a
[root@localhost ~]#bash -x test.sh
+ a=20
+ test
+ local a=10
+ echo 10
10
+ echo 20
20
[root@localhost ~]#
- 当在函数外另添加a=30,则会覆盖之前的20,先打印10,后打印30
[root@localhost ~]#vim test.sh
[root@localhost ~]#bash -x test.sh
+ a=20
+ a=30
+ test
+ local a=10
+ echo 10
10
+ echo 30
30
[root@localhost ~]#
- 当在函数里新加一个50,则会覆盖函数里之前的值
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
a=20
function test(){
local a=10
a=50 #该50会覆盖10,并不会影响函数外的a=20
echo $a
}
test
echo $a
[root@localhost ~]#bash -x test.sh
+ a=20
+ test
+ local a=10
+ a=50
+ echo 50
50
+ echo 20
20
[root@localhost ~]#
- 当函数里没有local时,则函数里的值会覆盖函数外的值
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
a=20
function test(){
a=10
echo 50
}
test
echo $a
[root@localhost ~]#bash -x test.sh
+ a=20
+ test
+ a=10
+ echo 50
50
+ echo 10
10
[root@localhost ~]#
- 当在函数里多加个local a=30时,该30会被50覆盖,则先打印50,后打印40
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
a=20
function test(){
a=40
local a=30
echo 50
}
test
echo $a
[root@localhost ~]#bash -x test.sh
+ a=20
+ test
+ a=40
+ local a=30
+ echo 50
50
+ echo 40
40
[root@localhost ~]#
- 当在函数里先定义a=40时,则该40会覆盖全局变量。再定义local a=30,则先打印函数里的值后打印函数外的值
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
a=20
function test(){
a=40
local a=30
echo $a
}
test
echo $a
[root@localhost ~]#bash -x test.sh
+ a=20
+ test
+ a=40
+ local a=30
+ echo 30
30
+ echo 40
40
[root@localhost ~]#
- 当先local定义a=30,后定义a=40时,则40不会覆盖全局变量,值覆盖函数里之前定义的变量。所以先打印40,后打印20
[root@localhost ~]#vim test.sh
[root@localhost ~]#cat test.sh
#!/bin/bash
a=20
function test(){
local a=30
a=40
echo $a
}
test
echo $a
[root@localhost ~]#bash -x test.sh
+ a=20
+ test
+ local a=30
+ a=40
+ echo 40
40
+ echo 20
20
[root@localhost ~]#
更多推荐
所有评论(0)