摘要:函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。格式: function f_name() { //function是可以省略的,函数名f_name最好不要跟shell中的关键词冲突 command } 函数必须要放在最前面,如果调用函数时发现还没定义函数,就会报错 示例1 #!/bin/bash ....
函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。格式:
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<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet192.168.75.136netmask255.255.255.0broadcast192.168.75.255 inet6fe80::8ace:f0ca:bb6e:d1f0prefixlen64scopeid0x20<link> inet6fe80::d652:b567:6190:8f28prefixlen64scopeid0x20<link> ether00:0c:29:21:5e:c0txqueuelen1000(Ethernet) RXpackets196221bytes15057853(14.3MiB) RXerrors0dropped0overruns0frame0 TXpackets191762bytes39138157(37.3MiB) TXerrors0dropped0overruns0carrier0collisions0 ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet192.168.75.150netmask255.255.255.0broadcast192.168.75.255 ether00:0c:29:21:5e:c0txqueuelen1000(Ethernet) ens37:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 ether00:0c:29:21:5e:catxqueuelen1000(Ethernet) RXpackets1018bytes101956(99.5KiB) RXerrors0dropped0overruns0frame0 TXpackets0bytes0(0.0B) TXerrors0dropped0overruns0carrier0collisions0 lo:flags=73<UP,LOOPBACK,RUNNING>mtu65536 inet127.0.0.1netmask255.0.0.0 inet6::1prefixlen128scopeid0x10<host> looptxqueuelen1(LocalLoopback) RXpackets800280bytes230505908(219.8MiB) RXerrors0dropped0overruns0frame0 TXpackets800280bytes230505908219.8MiB) TXerrors0dropped0overruns0carrier0collisions0
下面我们想要通过网卡名字找出对应的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<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 [root@lijie-01~]#ifconfig|grep"ens33:"//给过滤词后面增加:来精准识别到我们想要的行 ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 [root@lijie-01~]#ifconfig|grep-A1"ens33:"//加上-A1会显示我们识别到的行及其下一行 ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 inet192.168.75.136netmask255.255.255.0broadcast192.168.75.255 [root@lijie-01~]#ifconfig|grep-A1"ens33:"|grep\'inet\'//将上一步过滤出来的结果选择包含inet的行 inet192.168.75.136netmask255.255.255.0broadcast192.168.75.255 [root@lijie-01~]#ifconfig|grep-A1"ens33:"|grep\'inet\'|awk\'{print$2}\'//将上面的结果的第二段打印出来 192.168.75.136 [root@lijie-01~]#
下面我们来进一步给上一个shell加入判断条件:判断输入的网卡是不是系统的网卡,判断输入的网卡有没有IP 得到的代码段如下:
相关文章推荐
虚拟主机的专业参数,分别都是什么意思?2022-09-09
中非域名注册规则是怎样的?注册域名有什么用处? 2022-01-10
HostEase新年活动促销 美国/香港主机全场低至五折2021-12-28
HostGator下载完整备份教程分享2021-12-28
Flink中有界数据与无界数据的示例分析2021-12-28