Shell(5)数组

数组

普通数组 只能以数字作为索引
关联数组 可以使用字符串作为索引

数组类似变量 不同的是变量只能有一个值 数组中可以放多个值
变量:
   框子1=苹果
   框子2=香蕉
   框子3=茄子
   name=ahui
   ip=172.16.1.31
数组:
   框子1[小盒子1]=苹果
   框子1[小盒子2]=香蕉
   框子1[小盒子3]=茄子

数组语法:
数组名称[索引的名称|下标]=值
框子[盒子1]=苹果

第一种定义方式: 通过索引方式定义

[root@test ]# array[0]=shell
[root@test ]# array[1]=mysql
[root@test ]# array[2]=docker
[root@test ]# echo $array
shell

查看数组 按照索引的方式查看

[root@test ]# echo ${array[1]}
mysql
[root@test ]# echo ${array[2]}
docker
[root@test ]# echo ${array[0]}
shell

查看数组中所有的值

[root@test ]# echo ${array[*]}
shell mysql docke

[root@test ]# echo ${array[@]}
shell mysql docker

临时取消数组

[root@test ]# unset array

第二种定义数组方式: 直接定义默认索引从0开始

[root@test ]# array=(xiaohong xiaozi  xiaolv  xiaolan)
[root@test ]# echo ${array[*]}
xiaohong xiaozi xiaolv xiaolan
[root@test ]# echo ${!array[*]}
0 1 2 3

例:

大保健: 红浪漫

红浪漫[1]=xiaohong
红浪漫[2]=xiaolv
红浪漫[3]=xiaozi

查看房间内容
echo 红浪漫[1]
xiaohong
查看所有的
echo 红浪漫[*]

第三种定义方式: 直接定义和通过索引定义

[root@test ]# array=(xiaozi  [666]=xiaolan [888]=xiaohong xiaolv )
[root@test ]# echo ${array[*]}
xiaozi xiaolan xiaohong xiaolv
[root@test ]# echo ${!array[*]}
0 666 888 889

第四种定义方式: 命令定义

[root@test ]# ls
expect.ex  game.sh  jumpserver.sh  test.ex
[root@test ]# array=(`ls`)
[root@test ]# echo ${array[*]}
expect.ex game.sh jumpserver.sh test.ex
[root@test ]# echo ${!array[*]}
0 1 2 3

定义IP地址数组: 进行数组遍历

[root@test ]# ip=(172.16.1.7 172.16.1.2 172.16.1.31 172.16.1.51)
[root@test ]# echo ${ip[*]}
172.16.1.7 172.16.1.2 172.16.1.31 172.16.1.51
[root@test ]# 
[root@test ]# for i in ${ip[*]};do echo $i;done
172.16.1.7
172.16.1.2
172.16.1.31
172.16.1.51

写入脚本

[root@test ]# 
[root@test ]# cat array.sh
#!/bin/bash
ip=(172.16.1.7 172.16.1.2 172.16.1.31 172.16.1.51)

for i in ${ip[*]}
do
	  echo $i
done
[root@test ]# sh array.sh
172.16.1.7
172.16.1.2
172.16.1.31
172.16.1.51

通过索引来遍历数组

[root@test ]# cat array.sh 
#!/bin/bash
ip=(172.16.1.7 172.16.1.2 172.16.1.31 172.16.1.51)

for i in ${!ip[*]}
do
	  echo ${ip[$i]}
done

[root@test ]# sh array.sh
172.16.1.7
172.16.1.2
172.16.1.31

	172.16.1.51

案例: 取数组中的值

[root@test ]# cat array.sh 
#!/bin/bash
ip=(172.16.1.7 172.16.1.2 172.16.1.31 172.16.1.51)
for i in ${ip[*]}
do
	   ping -c1 -W1 $i &>/dev/null
	   if [  $? -eq 0 ];then
	   echo "ping $i is ok...."
	   else
	 echo "ping $i is error..."
	   fi
done

查看普通数组:

declare -a array='([0]="docker")'

关联数组: 定义关联数组需要声明

[root@test ]# declare -A array
[root@test ]# array[index1]=shell
[root@test ]# array[index2]=mysql
[root@test ]# array[index3]=docker
[root@test ]# echo ${array[*]}
shell mysql docker
[root@test ]# echo ${!array[*]}
index1 index2 index3

案例:array[a]++ ========= array[a]=array[a+1]

[root@test ]# unset array
[root@test ]# declare -A array
[root@test ]# #a b c 
[root@test ]# let a++
[root@test ]# let a++
[root@test ]# let b++
[root@test ]# let c++
[root@test ]# echo $a $b $c
2 1 1
[root@test ]# let array[a]++
[root@test ]# let array[a]++
[root@test ]# let array[b]++
[root@test ]# let array[c]++
[root@test ]# echo ${array[a]}
2
[root@test ]# echo ${array[b]}
1
[root@test ]# echo ${array[c]}
1

案例:使用for循环依次取值:

[root@test ]# cat user.txt 
a
a
b
c
[root@test ]# #i=a
[root@test ]# #let array[$i]++
[root@test ]# #let array[a]++
[root@test ]# #let array[a]++
[root@test ]# #echo ${array[a]}
[root@test ]# #2
[root@test ]# #let array[b]++
[root@test ]# #let array[c]++
[root@test ]# echo ${array[a]}
2
[root@test ]# #echo ${array[a]}
[root@test ]# #echo ${array[b]}
[root@test ]# #echo ${array[c]}


[root@test ]# cat array.sh
#!/bin/bash
declare -A array 
for i in `cat user.txt`
do
	let array[$i]++
done
for i in  ${!array[*]}
do
	echo $i 出现了 ${array[$i]}done
[root@test ]# sh array.sh
a 出现了 2 次
b 出现了 1 次
c 出现了 1

案例:统计bash的数量

[root@test ]# cat array1.sh
#!/bin/sh
declare -A array
while read line
do
	 bash=`echo $line|awk -F: '{print $NF}'`
	 let array[$bash]++
done</etc/passwd

for i in ${!array[*]}
do
	echo $i 出现了 ${array[$i]}done

测试

[root@test ]# sh array1.sh
/sbin/nologin 出现了 17 次
/bin/sync 出现了 1 次
/bin/bash 出现了 26 次
/sbin/shutdown 出现了 1 次
/sbin/halt 出现了 1

案例:数组统计IP出现次数:

[root@test ]# cat array1.sh 
#!/bin/sh
declare -A ips
while read line
do
	 ip=`echo $line|awk '{print $1}'`
	 let ips[$ip]++
done</var/log/nginx/access.log

for i in ${!ips[*]}
do
	echo $i 出现了 ${ips[$i]}done
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值