函數、函數參數
阿新 • • 發佈:2018-04-21
函數 函數參數 函數特殊字符 函數
Linux shell 可以用戶定義函數,然後再shell腳本中可以隨便調用;
shell中函數的定義格式如下:
[ function ] funname [ () ]
{
action;
[return int;]
}
說明:
可以帶function fun()定義,也可以直接fun()定義,不帶任何參數;
參數返回,可以顯示加:return返回,如果不加,將一最後一條命令運行結果,作為返回值。return後面跟數值n(0-255);
舉例:
#!/bin/bash abc() { echo "this is shell" } echo "------開始執行函數------" abc echo "------函數執行完畢------"
運行結果:
------開始執行函數------
this is shell
------函數執行完畢------
舉例:
顯示指定網卡ip
#!/bin/bash ip(){ ifconfig |grep -A1 "$1" |tail -1|awk ‘{print $2}‘ #註意,grep中的$1是需要輸入的函數第一個參數,-A1 表示顯示符合$1參數的下一行,-A2就是顯示符合的下兩行 #tail -1 表示顯示倒數第一行 #awk這裏是截取顯示以空格為間隔的第二行數據 } read -p "Please input the eth name:" e #輸出顯示Please input the eth name:,接受用戶輸入,將輸入的值賦予變量e myip=`ip $e` echo "$e address is $myip"
運行結果:
提示你輸入網卡名
Please input the eth name:eth0
eth0 address is 172.16.182.241
正則命令說明:
ifconfig
顯示本機ip
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.182.241 netmask 255.255.240.0 broadcast 172.16.191.255 ether 00:16:3e:0f:a0:3a txqueuelen 1000 (Ethernet) RX packets 326626 bytes 87332731 (83.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 284748 bytes 54875176 (52.3 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1 (Local Loopback) RX packets 30 bytes 3313 (3.2 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 30 bytes 3313 (3.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ifconfig |grep -A1 "eth0"
將顯示本機ip,將符合eth0的下一行也顯示出來
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.182.241 netmask 255.255.240.0 broadcast 172.16.191.255
ifconfig |grep -A1 "eth0"|tail -1
將上一個結果的顯示倒數第一行
inet 172.16.182.241 netmask 255.255.240.0 broadcast 172.16.191.255
ifconfig |grep -A1 "eth0"|tail -1|awk ‘{print $2}‘
以空格為隔離符,顯示第二段
172.16.182.241
函數參數
- 在shell中,調用函數時候可以像其傳遞參數。
- 在函數體內部,通過$n的形式來獲取參數的值;例如,$1表示第一個參數,$2表示第二個參數$$
#!/bin/bash
funcs(){
echo "第一個參數:$1"
echo "第二個參數:$2"
echo “第十個參數:$10”
echo "第十個參數:${10}"
echo "第十一個參數:${11}"
echo "參數總共有: $# 個"
echo "作為一個字符串輸出所有參數: $*"
}
funcs 1 2 3 4 5 6 7 8 9 66 88
輸出結果:
第一個參數:1
第二個參數:2
“第十個參數:10”
第十個參數:66
第十一個參數:88
參數總共有: 11 個
作為一個字符串輸出所有參數: 1 2 3 4 5 6 7 8 9 66 88
說明:
$10不能獲取第十個參數,獲取第十個參數需要${10},加上大括號,需要使用${n}來表示參數;
特殊字符參數
字符 意義 $# 統計腳本參數的個數 $* 以一個字符串顯示所有向腳本傳遞的參數 $$ 腳本運行的當前進程ID號 $! 後臺運行的最後一個進程的ID號
函數、函數參數