前端之家收集整理的这篇文章主要介绍了
shell学习之二十--函数及函数的作用,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一、定义
函数和别名差不多,具有和别名相同的
功能。 简单的说
函数的作用就是把程序里多次
调用相同的
代码部门定义成一份,然后起个名字, 所有的
调用都只用这个名字就可以了。
修改代码时,只需要改变
函数体内的
代码即可。 优势: 1、把相同的程序段定义成
函数,可以减少程序
代码量。 2、
增加程序的可读、易读性。 3、实现程序的
功能模块化。 二、shell
函数的语法 语法格式
函数名(){ 指令。。。 return n } 规范写法 function
函数名(){ 指令。。。 return n } 三、
函数的执行
调用函数 1、直接执行
函数名即可。
函数名 注意: a、执行
函数时,不要带小括号了。 b、
函数定义及
函数体必须在要执行的
函数名前面定义。shell的执行从上倒下按行执行的。 2、带参数的
函数执行
方法 函数名 参数1 参数2 【
函数带参数的说明】 a、在
函数体中位置参数($1、$2、$3、$4、$5、$#、$*、$?、$@)都可以是
函数的参数。 b、父脚本的参数则临时地被
函数参数所掩盖或隐藏。 c、$0比较特殊,他任然是父脚本的
名称。 d、当
函数完成时,原来的命令行参数会恢复。 e、在shell
函数里面,return命令的
功能与工作方式与exit相同,用于跳出
函数。 f、在shell
函数里使用exit会终止整个脚本。 g、return语句返回一个
退出值给
调用的程序。
函数实例 3、
调用自己写的
函数 [root@node01 day8]# vi fun01.sh #!/bin/sh wolf01() { echo "I am wolf" } wolf01 [root@node01 day8]# vi fun01.sh #!/bin/sh wolf01() { echo "I am wolf" } echo "`wolf01`" 打印
函数 [root@node01 day8]# sh fun01.sh I am wolf [root@node01 day8]# vi exec01.sh #!/bin/sh [ -f fun02.sh ] && . /data/day8/fun02.sh||exit 1 如果fun02.sh不存在,则不执行 wolf01 [root@node01 day8]# sh exec01.sh I am wolf 4、
调用系统的
函数 之前学习过/etc/init.d/functions vi /etc/init.d/functions #by wolf wolf(){ echo "this is wolf,you are $1." }
调用系统
函数 [root@node01 day8]# vi exec01.sh #!/bin/sh #[ -f fun02.sh ] && . /data/day8/fun02.sh||exit 1 . /etc/init.d/functions wolf [root@node01 day8]# sh exec01.sh this is wolf,you are . 5、
函数的传参 [root@node01 day8]# tail -4 /etc/init.d/functions #by wolf wolf(){ echo "this is wolf,you are $1." 传参 } [root@node01 day8]# vi exec01.sh #!/bin/sh #[ -f fun02.sh ] && . /data/day8/fun02.sh||exit 1 . /etc/init.d/functions wolf good good是传入的参数 [root@node01 day8]# sh exec01.sh this is wolf,you are good 把上面的
修改为脚本传参 [root@node01 day8]# vi exec01.sh #!/bin/sh #[ -f fun02.sh ] && . /data/day8/fun02.sh||exit 1 . /etc/init.d/functions wolf $1 脚本传参 [root@node01 day8]# sh exec01.sh cc this is wolf,you are cc. 脚本传参的过程 cc---exec01.sh的$1---/etc/init.d/functions的$1---最后打印 6、综合列子:使用行数及
函数传参,脚本传参实现,对任意指定的URL判断是否异常 使用curl返回200判断 [root@node01 day8]# vi check_web_by_fun.sh #!/bin/sh function Check_Url(){ curl -I -s $1|head -1 && return 0||return 1 } Check_Url $1 [root@node01 day8]# sh check_web_by_fun.sh baidu.com HTTP/1.1 200 OK 使用curl返回200判断 [root@node01 day8vi check_web_by_fun01.sh com #!/bin/sh function Check_Url(){ curl -I -s -w "%{http_code}" $1 -o /dev/null } Check_Url $1 使用wget返回0判断 [root@node01 day8]# vi check_web_by_fun02.sh #!/bin/sh function Check_Url(){ wget --spider --timeout=100 --tries=2 $1 &>/dev/null if [ $? -ne 0 ] then echo "web is error" else echo "web is ok" fi } Check_Url $1 [root@node01 day8]# sh check_web_by_fun02.sh www.baidu.com web is ok