function
函数
1.什么是函数
函数也是具有和别名类似的功能:
简单地说,函数的作用就是把程序里多次调用相同的代码部分定义成一份,然后为这一份代码起个名字,其他所有的重复调用这部分代码就都只调用这个名字就可以了,当需要修改这部分重复代码时,只需要改变函数体内的一份代码即可实现所有调用修改。
使用函数的优势:
1、把相同的程序段定义成函数,可以减少整个程序的代码量。
2、增加程序的可读、易读性。
3、可以实现程序功能模块化,不同的程序使用函数模块化。
强调:对于shell来说,linux系统的2000个命令都可以说是shell函数。
2. shell函数语法
语法格式:
简单语法格式:
函数名(){
指令…
return n
}
规范语法格式:
function 函数名(){
指令 …
return n
}
3. shell函数的执行
调用函数:
1)直接执行函数名即可(不带括号)
函数名
注意:
a)执行函数时,函数后的小括号不要带
b)函数定义及函数体必须在要执行的函数名的前面定义
2)带参数的函数执行方法
函数名 参数 1 参数 2
【函数后接的参数说明】
* shell的位置参数($1、$2、$3、$4、$5、$#、$*、$?以及[email protected])都可以。
* 此时父脚本的参数临时被函数参数所掩盖或隐藏
* $0比较特殊,它仍然是父脚本的名称。
* 当函数完成时,原来的命令行脚本的参数即恢复。
* 在shell函数里面,return命令功能与shell里的exit类似,作用是跳出函数
* 在shell函数体里使用exit会退出整个shell脚本,而不是shell函数。
* return语句会返回一个退出值(返回值)给调度函数的程序
* 函数参数变量是在函数体里面定义。
4、函数范例:
范例1:
脚本如下:
$ cat hs01.sh #简单函数语法 jonny() { echo "I am jonny!" }
#规范函数语法
function jaye(){ echo "I am jaye!" } jonny #调用函数jonny jaye #调用函数jaye $ sh hs01.sh I am jonny! I am jaye!
范例2 调用函数:
1、被调用的函数脚本
$ vim hs01.sh jonny() { echo "I am jonny!" } function jaye(){ echo "I am jaye!" }
2、调用的函数脚本
$ cat hs02.sh HS="/server/script/hanshu/hs01.sh" . $HS jonny jaye
3、执行脚本
$ sh hs02.sh I am jonny! I am jaye!
范例3 函数传参:
$ cat fun01.sh who(){ echo "I am $1." #定义函数的传参 } who jonny #who 是函数 jonny是参数 $ sh fun01.sh I am jonny. #意思是将jonny 传给$1,那么打印出来的就是I am jonny.
范例4:函数传参及脚本传参
$ cat hs04.sh who(){ echo "I am $1." #定义函数的传参 } who $1 #定义脚本的传参 $ sh hs04.sh jonny #运行脚本接一个jonny参数 I am jonny. #打印出jonny,因为Jonny是脚本的传参,那么who jonny就是函数的传参.
范例5:函数传参转成脚本命令行传参,对任意指定URL判断是否异常。
案例一:
$ cat hs05.sh #!/bin/sh function check_url(){ curl $1 &>/dev/null if [ $? -eq 0 ];then echo "$1 is ok" else echo "$1 is no" fi } check_url $1
案例二:
$ cat hs05.sh #!/bin/sh function check_url(){ #curl $1 &>/dev/null wget -T 10 --spider -t 2 $1 &>/dev/null if [ $? -eq 0 ];then echo "$1 is ok" else echo "$1 is no" fi } check_url $1 $ sh hs05.sh www.baidu.com www.baidu.com is ok $ sh hs05.sh www.baidaaaau.com www.baidaaaau.com is no
分步解答:
1、脚本脚本传参检查web url是否正常。
2、检查的功能写成函数
3、函数传参转成脚本命令行传参,对任意指定URL判断是否异常。