Shell脚本中的数组

数组

1、数组概述

数组:多个元素组成的一个集合

主要作用:可以一次性定义多个变量,不需要人工依次声明

2、创建数组的格式

格式:

格式1:
数组名=(value0 value1 value2)

格式2:
数组名=([0]=1 [1]=2 [2]=3)
//[]是数组的下标索引,对应的是元素在数组当中的位置

3、打印数组的方式

echo ${数组名[*]}  //打印整个数组所有元素
echo ${数组名[n]}  //打印数组中索引下标为n的元素(数组中第一个元素的索引是0)
echo ${#数组名[*]}  //打印数组的长度

4、遍历数组

示例1:数组中各元素为用户名的用户不存在,遍历此数组用其元素做用户名创建用户

[root@pup1 opt]# vim shuzu.sh 

arr=(qqq www eee)
for user in ${arr[*]}
do
useradd $user
echo 123 | passwd --stdin $user
done

示例2:将数组中的数字拼接成一个完整的ip地址,判断可以通的保留到/opt/hosts.txt,不要过程,ping不通提示即可

[root@pup1 opt]# vim 1.sh 

ip=(10 20 30 40)
read -p "输入网络部分:" net
for i in ${ip[*]}
do
ping -c 3 ${net}${i} &> /dev/null
  if [ $? -eq 0 ]
  then echo "通"
  echo ${net}${i} >> /opt/hosts.txt
  else echo "不通"
  fi
done

5、数组切片

示例:

:0表示从索引下标为0的元素开始切片(包括此元素)

:2表示切片两个元素

6、对数组当中的元素替换

临时替换

示例:

表示将数组中第三个元素替换为6,刷新即失效

永久替换

示例:

7、删除数组及删除数组中的元素

删除整个数组

unset 数组名

删除数组中的指定元素(删除之后索引位置不会变动)

示例:

8、在数组中进行元素的追加

选择索引位置添加

示例:

不用索引位置在数组末尾添加

示例:(两种方式)

9、函数从数组中获取参数

示例1:

[root@pup1 opt]# vim 2.sh 

fact () {
abc=($(echo $*))
echo "abc的数组值:${abc[*]}"
}
abc1=(`seq 0 2 10`)  #定义数组abc1为从0-10的偶数
fact ${abc1[*]}

示例2:0-10的偶数累加求和

[root@pup1 opt]# vim 3.sh 
fact () {
abc=($(echo $*))
sum=0
for num in ${abc[*]}  #遍历abc数组进行累加求和
do sum=$[$sum+$num]
done
echo $sum
}
abc1=(`seq 0 2 10`)
fact ${abc1[*]}

示例3:将0-10的数组乘2并打印新数组

[root@pup1 opt]# vim 4.sh 

fact () {
abc=($(echo $*))
echo "abc的数组值:${abc[*]}"
for ((num=0;num<=$(($#-1));num++))  #取的是索引下标的值
do
abc[$num]=$[${abc[$num]}*2]
done
echo ${abc[*]}
}
abc1=(`seq 1 10`)
fact ${abc1[*]}

10、冒泡排序

原理:在数组当中将两个相邻的元素进行比较

示例1:正向排序

[root@pup1 opt]# vim maopao.sh 
#!/bin/bash

abc=(2 1 6 4 5 3)
length=${#abc[*]}
for ((i=1;i<$length;i++))          #确定循环的次数
do
 	for((j=0;j<$length-i;j++))     #定义内循环的范围,确定索引值,最后一位不用比较
	do  first=${abc[$j]}           #定义第一个位置0起始位置元素的值
	    k=$[$j+1]                  #定义第二个索引下标,每次都比前一个加1
	    second=${abc[$k]}          #定义数组当中第二个元素的值
		if [ $first -gt $second ]  #进行条件判断:正向排序
		then temp=$first           #定义一个临时交换变量,给第一个元素
		abc[$j]=$second            #$k的起始索引位置为1,原来索引下标1移动到索引下标0
		abc[$k]=$temp
		fi
	done
done
echo ${abc[*]}

示例2:反向排序文件系统使用率

[root@pup1 opt]# vim fanxiang.sh 

disk=(`df -h | awk 'NR>1 {print $5}' | tr -d '%'`)
length=${#disk[*]}
for ((i=1;i<$length;i++))
do
        for((j=0;j<$length-i;j++))
        do  first=${disk[$j]}
            k=$[$j+1]
            second=${disk[$k]}
                if [ $first -lt $second ]
                then temp=$first
                disk[$j]=$second
                disk[$k]=$temp
                fi
        done
done
echo ${disk[*]}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值