函數、函數參數

函數

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號
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章