shell编程数组,内有贴切举例,让shell编程更简单

一:数组

数组简介:用一个固定的字符串,代替多个不固定字符串。

数组分为普通数组和关联数组。普通数组的索引只能是整数,关联数组的索引可以是字符串。

一:普通数组

定义数组方法1:数组名[索引]=变量值      例如:test[0]=apple;注意:数组的索引是从0开始的

定义数组方法2:数组名=(变量名 变量名) 在该方法中,索引是自动添加的,从0开始。例如:test2=(`cat /etc/passwd`)  把小括号里的命令先行执行, 得出的结果作为test2数组的变量值,每一行内容即是一个变量值。

查看数组方法1 : declare -A | grep 变量名 示例:declare -A | grep test2      该查看方法既可以查看数组名,变量值,也可以查看索引。

查看数组方法2:echo ${变量名[索引值]}示例:echo ${test2[*]} *等于@都是所有索引值的意思,该查看方法只能查看变量值

查看数组全部的索引:echo ${!变量名[@]} 示例:echo ${!test1[@]} 查看test1的索引,该方法只能查看索引值

查看某索引的变量值:${数组名[索引]}  示例:echo ${test1[0]}  查看索引为0的数组

获取数组长度方法1:echo ${#数组名[*]} 示例:echo ${#test1[*]}  返回值即是数组的长度

获取数组长度方法2:${#数组名[@]} 示例:echo ${#test1[@]}  返回值即是数组的长度

从指定位置查看变量值:echo ${test1[@]:1} 从数组下标1开始访问所有变量值

从指定位置查看指定长度的变量值:echo ${test1[@]:1:2} 从数组索引1开始,访问两个元素

二:关联数组

关联数组在使用之前必须要先进行声明

声明数组方法:declare -A 变量名      例如:declare -A test3

数组赋值方法一:一次赋一个值:数组名[索引]=变量值   例如:test3[index1]=pear

数组赋值方法二:一次赋多个值:数组名=([索引值]=变量值 [索引值]=变量值) 例如:test3=([fuzhu]=dunshan [shangdan]=lvbu [fashi]=xiaoqiao [daye]=hanxin [sheshou]=yuji)

查看数组的方法与上面的查看方法一致,查看数组变量值和数组索引值的方法也都一样。

三:属组和循环

案例一:while脚本快速定义数组

#!/bin/bash
#循环读取文件,定义数组
while read line
do
        hosts[++i]=$line        #hosts:数组名 #[++i]:索引递增,++i是1开始,i++是0开始,#$line:值,即文件中的内容
done < /etc/hosts
#输出索引每一行
for i in ${!hosts[@]}
do
echo "$i  :   ${hosts[$i]}"
done

案例2:for脚本快速定义数组

[root@localhost ~]# vim for_array.sh 
#!/bin/bash
OLD_IFS=$IFS #将旧的分隔符备份
IFS=$'\n'    #定义for的分隔符是换行符
for line in `cat /etc/hosts`  #line就是hosts中的值
do
        hosts[++i]=$line
done
for i in ${!hosts[@]}
do
echo "$i:  ${hosts[$i]}"
done
IFS=$OLD_IFS   #将分隔符还原,便于脚本后方的for使用

案例3:数组统计性别

[root@localhost ~]# vim sex.txt  #定义性别文件
jack m
alice f
tom m
#!/bin/bash                        #定义脚本统计性别
declare -A sex                      #定义关联数组
while read line                    #line即是sex.txt中的文件内容
do
        type=`echo $line|awk '{print $2}'`  #把sex.txt中得内容第二行拿出来
        let sex[$type]++                    #统计m,f的数量,sex数组索引值进行相加,是f就是+1,是m就是+1,当第二个m或者f出现时就是1+1=2,这样就统计出来了人数。
done < sex.txt

for i in ${!sex[@]}
do
        echo "$i : ${sex[$i]}"
done

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值