20.16/20.17 shell中的函数
20.18 shell中的数组
20.19 告警系统需求分析
shell中的函数
函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。
格式: function f_name() {
command
}
简单示例1:函数必须要放在最前面
#!/bin/bash
function etc(){
echo "one $1"
echo "two $2"
}
etc 1 2
输出结果如下:
[root@ shell]# sh funciton
one 1
two 2
[root@ shell]#
示例2:运算加减
#!/bin/bash
function add(){
s=$[$1+$2]
}
add 1 3
echo $s
过程如下:
[root@iZwz988z4yuz7a6sqgivwxZ shell]# sh -x funciton2
+ add 1 3
+ s=4
+ echo 4
4
示例3:查看IP地址
#!/bin/bash
function ip(){
ifconfig|grep -A1 "$1"| awk '/inet/ {print $2}'
}
read -p "please input the network name: " use
myip=`ip $use`
echo "$use is $myip"
#ifconfig 查询IP地址
#grep -A1 "$1" 查询第一段
#awk '/inet/ '{print $2}' 查找inet字符列出后打印第二列(即IP地址)
#read -P 把use当初read的变量 用户输出
#myip=`ip $use` 设置变量(myip)=调用函数IP+用户输出
#echo 打印myip和use变量
运行结果如下
+ read -p 'please input the network name: ' use
please input the network name: eth0
++ ip eth0
++ grep -A1 eth0
++ awk '/inet/ {print $2}'
++ ifconfig
+ myip=172.18.220.248
+ echo 'eth0 is 172.18.220.248'
eth0 is 172.18.220.248
shell中的数组
定义数组:
[root@shell]# a=(`seq 1 5`)
[root@ shell]# echo ${a[*]}
1 2 3 4 5
[root@ shell]# echo ${#a[*]}
5
#`seq 1 5` 序数12345
#获取数组内容 ${a[*]}或者${a[@]}
#获取数组的元素个数 ${#a[*]} ---前面加个#号
数组赋值和查询:
数组查询:是从下标0开始
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
1 2 3 4 5
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[0]}
1
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[1]}
2
[root@iZwz988z4yuz7a6sqgivwxZ shell]#
数组赋值:
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
1 2 9 4 5
[root@iZwz988z4yuz7a6sqgivwxZ shell]# a[2]=6
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
1 2 6 4 5
[root@iZwz988z4yuz7a6sqgivwxZ shell]#
#赋值a[下标]=赋值 ---a[2]=6
#添加下标
[root@iZwz988z4yuz7a6sqgivwxZ shell]# a[5]=10
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
1 2 6 4 5 10
[root@iZwz988z4yuz7a6sqgivwxZ shell]#
#只需添加多一个下标即可
数组删除:
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
1 2 6 4 5
[root@iZwz988z4yuz7a6sqgivwxZ shell]# unset a[0]
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
2 6 4 5
[root@iZwz988z4yuz7a6sqgivwxZ shell]#
#删除数组里的一个值只需 unset a[下标] ---unset a[0]
截取数组和替换
#截取数组
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
1 1 6 4 5
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]:0:3}
1 1 6
# ${a[*]:0:3} 0代表从第一个开始截取 3代表截取3个 以冒号为分割
#倒数截取数组
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
1 1 6 4 5
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]:0-3:2}
6 4
# ${a[*]:0-3:2} 0-3代表倒数第3个开始截取 2表示截取2个
#数组替换
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]}
1 1 6 4 5
[root@iZwz988z4yuz7a6sqgivwxZ shell]# echo ${a[*]/1/10}
10 10 6 4 5
#类似sed的替换