函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。格式:
成都创新互联专注于福山网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供福山营销型网站建设,福山网站制作、福山网页设计、福山网站官网定制、小程序开发服务,打造福山网络公司原创品牌,更为您提供福山网站排名全网营销落地服务。functionf_name(){//function是可以省略的,函数名f_name最好不要跟shell中的关键词冲突 command }
函数必须要放在最前面,如果调用函数时发现还没定义函数,就会报错
示例1#!/bin/bash inp(){ echo$1$2$0$#//$0表示脚本名字,$#表示参数个数 } inp1a2//使用函数名来调用函数,后面跟需要用的参数
执行结果如下:
[root@lijie-01shell]#sh-xfun1.sh +inp1a2 +echo1afun1.sh3 1afun1.sh3 [root@lijie-01shell]#
我们将上面的脚本修改如下:
#!/bin/bash functioninp(){ echo"Thefirstparis$1" echo"Thesecondparis$2" echo"Thescriptnameis$0" echo"Thenumbersofparis$#" } inp1a2b
执行结果如下:
[root@lijie-01shell]#sh-xfun1.sh +inp1a2b +echo\'Thefirstparis1\' Thefirstparis1 +echo\'Thesecondparisa\' Thesecondparisa +echo\'Thescriptnameisfun1.sh\' Thescriptnameisfun1.sh +echo\'Thenumbersofparis4\' Thenumbersofparis4 [root@lijie-01shell]#shfun1.sh Thefirstparis1 Thesecondparisa Thescriptnameisfun1.sh Thenumbersofparis4 [root@lijie-01shell]#
我们再来修改下这个脚本,调用函数的参数也可以使用$1$2这种形式
#!/bin/bash functioninp(){ echo"Thefirstparis$1" echo"Thesecondparis$2" echo"Thescriptnameis$0" echo"Thenumbersofparis$#" } inp$1$2//这里的$1$2指的就是给整个脚本传递的参数
执行过程看下面:
[root@lijie-01shell]#sh-xfun1.sh//不带参数执行,返回的结果如下 +inp +echo\'Thefirstparis\' Thefirstparis +echo\'Thesecondparis\' Thesecondparis +echo\'Thescriptnameisfun1.sh\' Thescriptnameisfun1.sh +echo\'Thenumbersofparis0\' Thenumbersofparis0 [root@lijie-01shell]#sh-xfun1.sh1//带1个参数执行,返回的结果如下 +inp1 +echo\'Thefirstparis1\' Thefirstparis1 +echo\'Thesecondparis\' Thesecondparis +echo\'Thescriptnameisfun1.sh\' Thescriptnameisfun1.sh +echo\'Thenumbersofparis1\' Thenumbersofparis1 [root@lijie-01shell]# 示例2:两个数之和
#!/bin/bash sum(){ s=$[$1+$2] echo$s } sum110
执行结果如下:
[root@lijie-01shell]#sh-x!$ sh-xfun2.sh +sum110 +s=11 +echo11 11 [root@lijie-01shell]# 示例3输入网卡名字显示网卡IP
分析:比如,我这台虚拟主机有以下网卡
[root@lijie-01shell]#ifconfig ens33:flags=4163
下面我们想要通过网卡名字找出对应的IP,我们就可以通过一个函数来表示
#!/bin/bash ip(){ ifconfig|grep-A1"$1:"|grep\'inet\'|awk\'{print$2}\'//-A1显示关键词的这一行及下一行,这行代码的含义在下个代码块解析 } read-p"Pleaseinputtheethname:"e myip=`ip$e` echo"$eaddressis$myip"
我们来看上面脚本的执行结果
[root@lijie-01shell]#shfun3.sh Pleaseinputtheethname.ens33 192.168.75.136 [root@lijie-01shell]#vimfun3.sh [root@lijie-01shell]#shfun3.sh Pleaseinputtheethname.ens33:0 192.168.75.150 [root@lijie-01shell]#shfun3.sh//由于ens37没有IP,因此没有输出 Pleaseinputtheethname.ens37 [root@lijie-01~]#
下面我们一步步来看关键代码的执行
[root@lijie-01~]#ifconfig|grep"ens33"//过滤出包含ens33的行,结果出现两行,不是我们想要的 ens33:flags=4163
下面我们来进一步给上一个shell加入判断条件:判断输入的网卡是不是系统的网卡,判断输入的网卡有没有IP 得到的代码段如下: