Shell介绍(二)函数,数组
[root@web scripts]# cat fun.sh #!/bin/sh test1(){ echo "第一种函数定义方式" } function test2(){ echo "第二种函数定义方式" } function test3 { echo "第三种函数定义方式" } test1 test2 test3
函数的传参 不能直接传参
1. 在函数名的后面跟参数
fun(){ if [ -f $1 ];then echo "$1 is exsis" else echo "$1 is no ex" fi } fun $1
2. 全局配置 在函数的最上面 设置变量
[root@web scripts]# cat fun1.sh #!/bin/sh num=20 fun(){ for i in `seq $1` do sum=$[num+i] done echo $sum } fun $1
3. local 只在函数体内部生效
[root@web scripts]# cat fun1.sh #!/bin/sh fun(){ num=20 for i in `seq $1` do sum=$[num+i] done echo $sum } fun $1
定义普通数组
第一种定义方式
[root@web scripts]# array[0]=shell [root@web scripts]# array[1]=Linux [root@web scripts]# array[2]=MySQL
[root@web02 ~]# array=(shell mysql [20]=kvm [50]=test) [root@web02 ~]# echo ${array[*]} shell mysql kvm test [root@web02 ~]# echo ${!array[*]} 0 1 20 50
如何查看值 查看某个索引的值
[root@web scripts]# echo ${array[2]} MySQL [root@web scripts]# echo ${array[1]} Linux [root@web scripts]# echo ${array[0]} shell
查看所有的值
[root@web scripts]# echo ${array[*]} shell Linux MySQL [root@web scripts]# echo ${array[@]} shell Linux MySQL
如何查看索引
[root@web scripts]# echo ${!array[*]} 0 1 2 [root@web scripts]# echo ${!arraytest[*]} 0 1 2 3 4 [root@web scripts]# echo ${arraytest[*]} shell Linux Mysql kvm docker
案例: ping数组内的ip
[root@web scripts]# cat array.sh #!/bin/sh ip=( 10.0.0.7 10.0.0.8 10.0.0.254 10.0.0.1 ) for i in ${!ip[*]} do ping -c 1 -W 1 ${ip[$i]} done
普通数组
[root@web02 ~]# array[index1]=Shell [root@web02 ~]# array[index2]=Linux [root@web02 ~]# array[index3]=MySQL [root@web02 ~]# echo ${array[*]} MySQL [root@web02 ~]# echo ${array[1]} [root@web02 ~]# echo ${array[2]} [root@web02 ~]# echo ${array[3]} [root@web02 ~]# echo ${array[0]} MySQL
如何定义关联数组
declare -A array [root@web02 ~]# declare -A array [root@web02 ~]# array[index1]=Shell [root@web02 ~]# array[index2]=Linux [root@web02 ~]# array[index3]=MySQL [root@web02 ~]# echo ${array[index1]} Shell [root@web02 ~]# echo ${array[index2]} Linux [root@web02 ~]# echo ${array[index3]} MySQL [root@web02 ~]# echo ${array[*]} Shell Linux MySQL [root@web02 ~]# echo ${!array[*]} index1 index2 index3
查看数组的长度
遍历数组 三种方式
[root@web02 ~]# let array[a]++ [root@web02 ~]# let array[a]++ [root@web02 ~]# let array[a]++ [root@web02 ~]# let array[a]++ [root@web02 ~]# let a++ [root@web02 ~]# let a++ [root@web02 ~]# echo $a 2 [root@web02 ~]# let b++ [root@web02 ~]# let b++ [root@web02 ~]# echo $b 2 [root@web02 ~]# let array[b]++ [root@web02 ~]# let array[b]++ [root@web02 ~]# let array[b]++ [root@web02 ~]# echo ${array[b]}
[root@web02 ~]# cat array.sh #!/bin/sh declare -A array for i in `cat sex.txt` do let array[$i]++ done for i in ${!array[*]} do echo "$i出现了 ${array[$i]}次" done
[root@web02 ~]# cat sex.txt zs m ls m em f alex m ld m oldboy f bgx x [root@web02 ~]# cat array.sh #!/bin/sh declare -A array while read line do type=`echo $line|awk '{print $2}'` let array[$type]++ done<sex.txt for i in ${!array[*]} do echo "$i出现了 ${array[$i]}次" done
案例3
[root@web02 ~]# cat array.sh #!/bin/sh declare -A array while read line do let array[`echo $line|awk '{print $2}'`]++ done<sex.txt for i in ${!array[*]} do echo "$i出现了 ${array[$i]}次" done 统计IP地址 [root@web02 ~]# cat array.sh #!/bin/sh declare -A array while read line do type=`echo $line|awk '{print $1}'` let array[$type]++ done</var/log/nginx/access.log for i in ${!array[*]} do echo "$i出现了 ${array[$i]}次" done