数组
数组是由多个元素组成的集合(不一定都是由数字组合)
例如: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[*]}"
~