shell脚本里的数组

数组

数组是由多个元素组成的集合(不一定都是由数字组合)

例如:int类型、string类型、浮点类型

数组的主要作用就是可以一次性定义多个变量。不需要我们人工依次声明。

数组的创建方式

方法1
数组名=(value0 value1 value2)

echo ${test [*] }

方法2

数组的下标索引[0]= 对应的是元素在数组当中的位置。默认从0开始 0..1..2..3

打印数组的长度

echo ${#test1 [*]}

遍历数组创建用户和密码

arr=(zzr yst ymr)
for user in ${arr[*]}
do
  useradd $user

 echo 123456 | passwd --stdin $user

done
~     

遍历ip ping通的记录下来不通的提示结果即可

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

数组切片

只能切一层

echo ${arr1[*]:0:2}

数组当中的元素进行替换

临时替换

echo ${arr1[*]/5/66}

永久替换

arr2(${arr2[*]/3/66})
echo ${arr2[*]}

删除数组

unset arr1

删除数组内的指定元素

unset arr1[3]

虽然3被删除了但是元素对应的索引下标位置是不会变的

在数组当中进行元素追加

在元素后进行追加

方法1

方法2

方法3(推荐)
arr1+=(11 12 13)

echo ${arr1[*]}

数组具体的应用

函数可以从数组当中获取参数

zyg () {

 abc=($(echo $*))
 echo "abc的数值:${abc[*]}"
}
abc1=(`seq 0 2 10 `)

zyg ${abc1[*]}

seq命令

seq 1 10 --- #设置1-10的随机数

seq 10 -1 1 --- #设置10-1的随机数

seq 1 2 10 -- # 设置1-10的随机数且步长为2

运算0-10的偶数累加求和

zyg () {

abc=($(echo $*))

echo "abc的数组:${abc[*]}"
sum=0
for num in ${abc[*]}
do
sum=$(($sum+$num))
done
echo $sum


}
abc1=(`seq 0 2 10`)
zyg ${abc1[*]}

冒泡排序

冒泡排序:类似气泡上涌的动作,在数组当中的元素从小到大,从大到小不断地移动

正向:1 2 3 4 5 6 7 8 9 10

反向:10 9 8 7 6 5 4 3 2 1

冒泡排序的思路

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

正向为例:

a=(10 3 6 2 20)

索引下标 0 1 2 3 4

不仅是换位置还是对索引下标进行赋值

需要使用for循环。双循环

外循环控制循环次数

内循环来比较相邻数值,完成位置交换(索引下标从0开始)

正向循环

abc=(20 10 60 30 50 40)

定义数组

length=${#abc[*]}

for ((i=1;i<$length;i++))

定义循环的次数

do

for ((k=0;k<$length-i;k++))

定义内部循环的范围,确定索引值,最后一位不用再比了。0 1 2 3 4

do

first=${abc[$k]}

定义第一个位置0起始位置元素的值

j=$(($k+1))

定义第二个索引下标,每次都比前一个加1

second=${abc[$j]}

定义数组当用第二个元素的值

if [ $first -gt $second ]

进行条件判断,正向排序,大的往后移,小的往前移。如果第一个数的值大于第二个数。

then

temp=$first

临时交换变量,给第一个元素

abc[$k=$second

$k的起始值是0,原来的索引下标是1的之后移动到索引下标0的位置。abv[0]=10

abc[$j=$temp]

大的值往后移 abc[1]=20

fi

done

done

echo "新的正向排序的数组:${abc[*]}"

磁盘空间反向冒泡排序

i=$(df -h | awk 'NR>1 {print $5}' | tr -d '%')
zyg=($i)
a=${#zyg[*]}
echo "原来的数组${zyg[*]}"
for ((y=1;y<$a;y++))
#确定循环的次数
do
for ((k=0;k<$a-y;k++))
do
 first=${zyg[$k]}
#定义第一个索引下标的元素值位置为0
  j=$(($k+1))
 second=${zyg[$j]}
#定义第二个索引下标且每次比之前加1
 if [ $first -lt $second ]
#进行条件判断,反向排序,
 then
   temp=$first
#定义一个临时变量,给第一个元素
   zyg[$k]=$second
#$k的起始值是0,原来的索引下标是1的之后移动到下标0的位置
   zyg[$j]=$temp
fi
done
done
echo "新的数组为:${zyg[*]}"

~                                                                      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值