Shell函数(二):数组

news/2024/7/24 5:28:49 标签: vim, linux, 云计算, 运维, 网络

shell函数二-数组

  • 三、数组:
    • 1.数组的最大作用:
    • 2.应用场景:
    • 3.格式:
    • 4.数组的数据类型:
    • 5.获取数组的长度:
    • 6.数组切片:
    • 7.数据传参:
    • 8.冒泡排序:

三、数组:

1.数组的最大作用:

一次性定义多个变量。

2.应用场景:

获取数组长度,获取元素长度,遍历元素,元素切片,元素替换,元素删除。

3.格式:

(1)格式1:
[root@test1 ~]# wangz=(1 2 3 4 5)
[root@test1 ~]# echo ${wangz[*]}
1 2 3 4 5
(2)格式2:
[root@test1 ~]# arr=([0]=1 [1]=2 [2]=3)
[root@test1 ~]# echo ${arr[*]}
1 2 3
(3)格式3:
[root@test1 ~]# abc="1 2 3 4"
[root@test1 ~]# arr1=($abc)
[root@test1 ~]# echo ${arr[*]}
1 2 3

4.数组的数据类型:

(1)数据类型:

[root@test1 ~]# wangz=(1 2 3 4 5)
[root@test1 ~]# echo ${wangz[*]}
1 2 3 4 5

(2)字符类型:

[root@test1 ~]# wangz=(billkin pp chanbaek)
[root@test1 ~]# echo ${wangz[*]}
billkin pp chanbaek

5.获取数组的长度:

(1)获取:

[root@test1 ~]# wangz=(billkin pp chanbaek)
[root@test1 ~]# echo ${#wangz[*]}
3

(2)读取下标索引的值(下标索引从0开始):

[root@test1 ~]# wangz=(billkin pp chanbaek)

[root@test1 ~]# echo ${wangz[2]}
chanbaek

(3)数组遍历:

1.设置:
[root@test1 ~]# vim wangzz.sh
wang=(billkin pp chanyeol baekhyun troye)
for i in ${wang[*]}
do
echo $i
done
[root@test1 ~]# sh wangzz.sh 
billkin
pp
chanyeol
baekhyun
troye
2.遍历函数:
[root@test1 ~]# vim wang.sh

ky29=(billkin pp chanyeol baekhyun suho)
for i in ${ky29[*]}
do
useradd $i
echo 123456 | passwd --stdin $i
done

[root@test1 ~]# sh wang.sh
useradd:用户“billkin”已存在
更改用户 billkin 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“pp”已存在
更改用户 pp 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“chanyeol”已存在
更改用户 chanyeol 的密码 。
passwd:所有的身份验证令牌已经成功更新。
useradd:用户“baekhyun”已存在
更改用户 baekhyun 的密码 。
passwd:所有的身份验证令牌已经成功更新。
更改用户 suho 的密码 。
passwd:所有的身份验证令牌已经成功更新。

6.数组切片:

(1)格式:

[root@test1 ~]# bk=(1 2 3 4 5)
[root@test1 ~]# echo ${bk[*]:0:2} #从下标索引0开始的往后两位
1 2

(2)临时替换,永久替换:

1.临时替换:
[root@test1 ~]# bk=(1 2 3 4 5)
[root@test1 ~]# echo ${bk[*]/4/68}
1 2 3 68 5
[root@test1 ~]# echo ${bk[*]} #临时替换,重新打印即失效
1 2 3 4 5
2.永久替换:
[root@test1 ~]# bk=(1 2 3 4 5)
[root@test1 ~]# echo ${bk[*]}
1 2 3 4 5
[root@test1 ~]# bk=(${bk[*]/4/68})
[root@test1 ~]# echo ${bk[*]}
1 2 3 68 5

(3)删除数组:

1.整组删除:unset 数组名

2.删除单个元素:
[root@test1 ~]# bk=(pp rich handsome tall fat)
[root@test1 ~]# echo ${bk[*]}
pp rich handsome tall fat
[root@test1 ~]# unset bk[4] #unset 组名[下标索引]
[root@test1 ~]# echo ${bk[*]}
pp rich handsome tall

(4)增加:

1.指定下标索引添加:
[root@test1 ~]# echo ${bk[*]}
pp rich handsome tall
[root@test1 ~]# bk[4]=car
[root@test1 ~]# echo ${bk[*]}
pp rich handsome tall car
2.直接在最后添加:
[root@test1 ~]# echo ${bk[*]}
pp rich handsome tall car
[root@test1 ~]# bk[${#bk[*]}]=boat
[root@test1 ~]# echo ${bk[*]}
pp rich handsome tall car boat
3.直接增加:
[root@test1 ~]# echo ${bk[*]}
pp rich handsome tall car boat
[root@test1 ~]# bk+=(wife cat)
[root@test1 ~]# echo ${bk[*]}
pp rich handsome tall car boat wife cat

7.数据传参:

(1)格式:

[root@test1 ~]# vim shuju.sh
#!/bin/bash
fx () {
abc1=($(echo $@))
echo "数组的值:${abc1[*]}"

}
abc1=(`seq 1 10`)
fx ${abc1[*]}
[root@test1 ~]# sh shuju.sh
数组的值:1 2 3 4 5 6 7 8 9 10

(2)函数返回数组:

1.返回数组:
[root@test1 ~]# vim wangz.sh
test () {

abc1=(`echo $@`)
sum=0
for i in ${abc1[*]}
do
sum=$(($sum+$i))
done
echo "$sum"


}
abc=(1 2 3 4 5)
test ${abc[*]}
[root@test1 ~]# sh wangz.sh 
15
2.遍历数组后乘2:
[root@test1 ~]# vim wangz.sh
test () {

abc1=(`echo $@`)
for ((i=0;i<=$(($#-1));i++))
do
abc1[$i]=$((${abc1[$i]}*2))
done
echo "${abc1[*]}"


}
abc=(1 2 3 4 5)
test ${abc[*]}


[root@test1 ~]# sh wangz.sh 
2 4 6 8 10

8.冒泡排序:

(1)定义:类似与气泡上涌动作,把数据在数据中从小到大或从大到小排序,不停向前或向后移动。最小的在第一个位置,最大的在最后,每个数组都相比较,小的往左走,打的向后移。

(2)实操:

1.原理:做一个双层for循环,外循环控制排序轮次,内循环比较两个相邻元素的大小,来交换位置,比外循环小1位。

[root@test1 ~]# vim maopao.sh
#!/bin/bash
abc=(20 10 60 40 50 70)
len=${#abc[*]}  #获取数组长度
for ((i=1;i<$len;i++)) #外循环控制排序轮次
do
 for ((k=0;k<$len-1;k++))  #内循环比较相邻两个元素大小
 do
  first=${abc[k]}  #取第一个值
  j=$(($k+1))     #当前索引号加1
  second=${abc[$j]} #取第二个值
 if [ $first -gt $second ]
  then
   temp=$first  #把第一个值保存到临时变量中
   abc[$k]=$second
   abc[$j]=$first
 fi
done
done
echo ${abc[*]}
[root@test1 ~]# sh maopao.sh
10 20 40 50 60 70

(3)扩展:

将虚拟机已使用内存大小按从大到小冒泡排序:
[root@test1 ~]# vim maopao.sh
#!/bin/bash
abc=(`df -h | awk 'NR>1 {print $5}' | tr -d "%"`)
len=${#abc[*]}  
for ((i=1;i<$len;i++)) 
do
 for ((k=0;k<$len-1;k++))  
 do
  first=${abc[k]}  
  j=$(($k+1))     
  second=${abc[$j]} 
 if [ $second -gt $first ]
  then
   temp=$first  
   abc[$k]=$second
   abc[$j]=$first
 fi
done
done
echo ${abc[*]}
[root@test1 ~]# sh maopao.sh
100 7 4 2 1 1 0 0 0


http://www.niftyadmin.cn/n/404748.html

相关文章

[Eigen中文文档] 就地矩阵分解

文档总目录 本文目录 英文原文(Inplace matrix decompositions) 从 Eigen 3.3 开始&#xff0c;LU、Cholesky 和 QR 分解可以就地操作&#xff0c;即直接在给定的输入矩阵内操作。当处理大矩阵时&#xff0c;或者当可用内存非常有限&#xff08;嵌入式系统&#xff09;时&…

chatgpt赋能python:Python中如何精确表示小数

Python中如何精确表示小数 在日常的数学计算过程中&#xff0c;小数是不可避免的。然而&#xff0c;由于计算机在存储和处理小数时的固有限制&#xff0c;会导致精度上的问题。Python作为一种通用的编程语言&#xff0c;也具有这样的限制。但是&#xff0c;在Python中&#xf…

UE5 材质常用大全

名称快捷方式类别计算方式/简介用法/说明Contant1+鼠标左键基础常量定义浮点数,与多通道运算时,自动影响多通道。各种基础参数Constant2Vector2+鼠标左键基础常量2维向量,2通道,影响2个通道。R/G,用于调整UVConstant3Vector3+鼠标左键基础常量3维向量,3通道,影响3个通道R…

Linux驱动开发(使用I2C总线设备驱动模型编写AT24C02驱动程序)

文章目录 前言一、I2C总线设备驱动模型二、设备树编写三、驱动程序编写1.提供i2c_driver结构体变量并且注册2.注册file_operations结构体3.操作AT24C02 四、应用程序编写五、上机测试总结 前言 本篇文章将讲解如何使用I2C总线设备驱动模型编写AT24C02驱动程序。 一、I2C总线设…

chatgpt赋能python:Python如何设置画笔颜色255

Python如何设置画笔颜色255 Python是一种强大的编程语言&#xff0c;广泛应用于不同领域&#xff0c;尤其在数据分析、机器学习和人工智能方面出色。在数据可视化方面&#xff0c;Python提供了一些很好的库和函数&#xff0c;例如matplotlib和seaborn&#xff0c;这些库可以用…

java设计模式(十四)模板方法

目录 定义模式结构角色职责代码实现适用场景优缺点 定义 模板方法模式(Template Method Pattern)&#xff0c;又叫模板模式(Template Pattern)&#xff0c; 指在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的…

曲线曲面基础:5.张量积曲面

曲线 C ( u ) C(u) C(u)是单参数的矢值函数&#xff0c;它是由直线段到三维欧几里得空间的映射&#xff08;变形&#xff09;。曲面是关于两个参数 u u u和 v v v的矢值函数&#xff0c;它表示由 u v uv uv平面上的二维区域 R R R到三维欧几里得空间的映射。因此&#xff0c;它…

电力需求侧管理和电力负荷管理数字化解决方案 安科瑞 许敏

摘要&#xff1a;近年来全国用电负荷特别是居民用电负荷的快速增长&#xff0c;全国范围内夏季、冬季用电负荷“双峰”特征日益突出&#xff0c;恶劣气候现象多发增加了电力安全供应的压力。具有随机性、波动性、间歇性特征的可再生能源大规模接入电网对电力系统的稳定性带来新…