shell中的函數(shù)

函數(shù)就是把一段代碼整理到了一個(gè)小單元中,并給這個(gè)小單元起一個(gè)名字,當(dāng)用到這段代碼時(shí)直接調(diào)用這個(gè)小單元的名字即可。格式:

成都創(chuàng)新互聯(lián)專注于福山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供福山營(yíng)銷型網(wǎng)站建設(shè),福山網(wǎng)站制作、福山網(wǎng)頁(yè)設(shè)計(jì)、福山網(wǎng)站官網(wǎng)定制、小程序開(kāi)發(fā)服務(wù),打造福山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供福山網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

functionf_name(){//function是可以省略的,函數(shù)名f_name最好不要跟shell中的關(guān)鍵詞沖突 command }

函數(shù)必須要放在最前面,如果調(diào)用函數(shù)時(shí)發(fā)現(xiàn)還沒(méi)定義函數(shù),就會(huì)報(bào)錯(cuò)

示例1

#!/bin/bash inp(){ echo$1$2$0$#//$0表示腳本名字,$#表示參數(shù)個(gè)數(shù) } inp1a2//使用函數(shù)名來(lái)調(diào)用函數(shù),后面跟需要用的參數(shù)

執(zhí)行結(jié)果如下:

[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

執(zhí)行結(jié)果如下:

[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]#

我們?cè)賮?lái)修改下這個(gè)腳本,調(diào)用函數(shù)的參數(shù)也可以使用$1$2這種形式

#!/bin/bash functioninp(){ echo"Thefirstparis$1" echo"Thesecondparis$2" echo"Thescriptnameis$0" echo"Thenumbersofparis$#" } inp$1$2//這里的$1$2指的就是給整個(gè)腳本傳遞的參數(shù)

執(zhí)行過(guò)程看下面:

[root@lijie-01shell]#sh-xfun1.sh//不帶參數(shù)執(zhí)行,返回的結(jié)果如下 +inp +echo\'Thefirstparis\' Thefirstparis +echo\'Thesecondparis\' Thesecondparis +echo\'Thescriptnameisfun1.sh\' Thescriptnameisfun1.sh +echo\'Thenumbersofparis0\' Thenumbersofparis0 [root@lijie-01shell]#sh-xfun1.sh1//帶1個(gè)參數(shù)執(zhí)行,返回的結(jié)果如下 +inp1 +echo\'Thefirstparis1\' Thefirstparis1 +echo\'Thesecondparis\' Thesecondparis +echo\'Thescriptnameisfun1.sh\' Thescriptnameisfun1.sh +echo\'Thenumbersofparis1\' Thenumbersofparis1 [root@lijie-01shell]# 示例2:兩個(gè)數(shù)之和

#!/bin/bash sum(){ s=$[$1+$2] echo$s } sum110

執(zhí)行結(jié)果如下:

[root@lijie-01shell]#sh-x!$ sh-xfun2.sh +sum110 +s=11 +echo11 11 [root@lijie-01shell]# 示例3輸入網(wǎng)卡名字顯示網(wǎng)卡IP

分析:比如,我這臺(tái)虛擬主機(jī)有以下網(wǎng)卡

[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

下面我們想要通過(guò)網(wǎng)卡名字找出對(duì)應(yīng)的IP,我們就可以通過(guò)一個(gè)函數(shù)來(lái)表示

#!/bin/bash ip(){ ifconfig|grep-A1"$1:"|grep\'inet\'|awk\'{print$2}\'//-A1顯示關(guān)鍵詞的這一行及下一行,這行代碼的含義在下個(gè)代碼塊解析 } read-p"Pleaseinputtheethname:"e myip=`ip$e` echo"$eaddressis$myip"

我們來(lái)看上面腳本的執(zhí)行結(jié)果

[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沒(méi)有IP,因此沒(méi)有輸出 Pleaseinputtheethname.ens37 [root@lijie-01~]#

下面我們一步步來(lái)看關(guān)鍵代碼的執(zhí)行

[root@lijie-01~]#ifconfig|grep"ens33"//過(guò)濾出包含ens33的行,結(jié)果出現(xiàn)兩行,不是我們想要的 ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 ens33:0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 [root@lijie-01~]#ifconfig|grep"ens33:"//給過(guò)濾詞后面增加:來(lái)精準(zhǔn)識(shí)別到我們想要的行 ens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500 [root@lijie-01~]#ifconfig|grep-A1"ens33:"//加上-A1會(huì)顯示我們識(shí)別到的行及其下一行 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\'//將上一步過(guò)濾出來(lái)的結(jié)果選擇包含inet的行 inet192.168.75.136netmask255.255.255.0broadcast192.168.75.255 [root@lijie-01~]#ifconfig|grep-A1"ens33:"|grep\'inet\'|awk\'{print$2}\'//將上面的結(jié)果的第二段打印出來(lái) 192.168.75.136 [root@lijie-01~]#

下面我們來(lái)進(jìn)一步給上一個(gè)shell加入判斷條件:判斷輸入的網(wǎng)卡是不是系統(tǒng)的網(wǎng)卡,判斷輸入的網(wǎng)卡有沒(méi)有IP 得到的代碼段如下:

當(dāng)前名稱:shell中的函數(shù)
文章鏈接:http://www.muchs.cn/article28/cjhjjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站制作Google、網(wǎng)站內(nèi)鏈靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化