shell-4
shell中的函式
函式就是把一段程式碼整理到一個小單元中,並給這個小單元起一個名字,當用到這段程式碼時直接呼叫這個小單元的名字即可。
格式
function f_name(){ //f_name是函式名字
command
}
函式必須要放在最前面,在寫指令碼時,可以省略function
示例:列印引數
#!/bin/bash
inp(){
echo "The first par is $1"
echo "The second par is $2"
echo "The third par is $3"
echo "the scripts par is $0"
echo "the number for par is $#"
}
inp $1 $2 $3 //定義指令碼引數
[root@zcy-1 sbin]# cat inp.sh
#!/bin/bash
inp(){
echo "The first par is $1"
echo "The second par is $2"
echo "The third par is $3"
echo "the scripts par is $0"
echo "the numberpar is $#"
}
inp $1 $2 $3
[root@zcy-1 sbin]#
[root@zcy-1 sbin]# sh inp.sh 2
The first par is 2
The second par is
The third par is
the scripts par is inp.sh
the numberpar is 1
[root@zcy-1 sbin]# sh inp.sh 3 1
The first par is 3
The second par is 1
The third par is
the scripts par is inp.sh
the numberpar is 2
[root@zcy-1 sbin]#
-案例2 定義加法的函式
[root@zcy-1 sbin]# cat 11.sh
#!/bin/bash
sum() {
s=$[$1+$2] /s指變數
echo $s
}
sum 1 7
[root@zcy-1 sbin]# sh -x 11.sh
+ sum 1 7
+ s=8
+ echo 8
8
[root@zcy-1 sbin]# sh 11.sh
8
- 案例 顯示網路卡的IP地址
#!/bin/bash
ip(){
ifconfig |grep -A1 "$1" |grep 'inet' |awk '{print $2}'
}
read -p "Please input the ens name:" ens
ip $ens
拆分解析
[root@zcy-1 shell]# ifconfig |grep -A1 "ens"
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.244.136 netmask 255.255.255.0 broadcast 192.168.244.255
--
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.202.139 netmask 255.255.255.0 broadcast 192.168.202.255
[root@zcy-1 shell]#
[root@zcy-1 shell]# ifconfig |grep -A1 "ens" |grep 'inet'
inet 192.168.244.136 netmask 255.255.255.0 broadcast 192.168.244.255
inet 192.168.202.139 netmask 255.255.255.0 broadcast 192.168.202.255
[root@zcy-1 shell]#
[root@zcy-1 shell]# ifconfig |grep -A1 "ens" |grep 'inet' |awk '{print $2}'
192.168.244.136
192.168.202.139
[root@zcy-1 shell]#
[root@zcy-1 shell]#
執行結果
[root@zcy-1 shell]# sh -x fun1.sh
+ read -p 'Please input the ens name:' ens
Please input the ens name:ens
+ ip ens
+ ifconfig
+ grep -A1 ens
+ grep inet
+ awk '{print $2}'
192.168.244.136
192.168.202.139
[root@zcy-1 shell]#
shell中的陣列 ##
陣列就是一串字串或者一串數字形成的變數,把這個變數叫做陣列,那麼就可以針對陣列進行一些操作。陣列很有用,但是使用場景不多。
定義陣列a=(1 2 3 4 5) ; echo ${a[@]}
例:
[root@zcy-1 shell]# b=(1 3 5)
[root@zcy-1 shell]# echo $b
1
[root@zcy-1 shell]# echo ${b[@]} /[ ] 裡面也可以使用*
1 3 5
[root@zcy-1 shell]#
- 檢視陣列中某一個元素的值,預設從0開始
[root@zcy-1 shell]# b=(1 2 3)
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${b[2]}
3
[root@zcy-1 shell]# echo ${b[0]}
1
[root@zcy-1 shell]#
- 獲取陣列的元素個數
[root@zcy-1 shell]# b=(1 2 3)
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${#b[@]}
3
[root@zcy-1 shell]# b=(1 2 3 4 5)
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${#b[@]}
5
[root@zcy-1 shell]#
echo ${b[*]} 等同於 ${b[@]}
顯示整個陣列
[root@zcy-1 shell]# b=(1 2 3 4 5)
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${#b[@]}
5
[root@zcy-1 shell]# echo ${#b[*]}
5
[root@zcy-1 shell]#
陣列賦值
針對其中一個元素進行賦值
[root@zcy-1 shell]# b[4]=10
[root@zcy-1 shell]# echo ${b[@]}
1 2 3 4 10
[root@zcy-1 shell]# b[5]=adc
[root@zcy-1 shell]# echo ${b[@]}
1 2 3 4 10 adc
[root@zcy-1 shell]#
如果下標不存在則會自動新增一個元素
- 數元素的刪除
[root@zcy-1 shell]# echo ${b[@]}
1 2 3 4 10 adc
[root@zcy-1 shell]#
[root@zcy-1 shell]# unset b[2] //刪除第3個元素,預設從0開始的
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${b[@]}
1 2 4 10 adc
[root@zcy-1 shell]#
清空陣列的值
[root@zcy-1 shell]# echo ${b[@]}
1 2 4 10 adc
[root@zcy-1 shell]#
[root@zcy-1 shell]# unset b
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${b[@]}
[root@zcy-1 shell]#
陣列的分片
在一些特殊需求下還是很有可能用到的
陣列賦值的另一個方式
[root@zcy-1 shell]# a=(`seq 1 10`)
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@zcy-1 shell]#
陣列分片
[root@zcy-1 shell]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${a[@]:0:3} //從第一個元素開始,擷取3個
1 2 3
[root@zcy-1 shell]# echo ${a[@]:2:5} //從第三個元素開始,擷取5個
3 4 5 6 7
[root@zcy-1 shell]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${a[@]:0-4:3} //從倒數第4個元素開始,擷取3個
7 8 9
[root@zcy-1 shell]#
陣列的替換
echo ${a[@]/4/20} //其中4是被替換的值,100是替換後的值
[root@zcy-1 shell]# echo ${a[@]/4/20}
1 2 3 20 5 6 7 8 9 10
[root@zcy-1 shell]#
還可以直接賦值,需要注意加上()
[root@zcy-1 shell]# echo ${a[@]}
1 2 3 4 5 6 7 8 9 10
[root@zcy-1 shell]#
[root@zcy-1 shell]# a=(${a[@]/4/11})
[root@zcy-1 shell]#
[root@zcy-1 shell]# echo ${a[@]}
1 2 3 11 5 6 7 8 9 10
[root@zcy-1 shell]#