Shell函数(二):数组

news/2024/7/3 0:36:46

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://lihuaxi.xjx100.cn/news/1216013.html

相关文章

SpringCloud-stream一体化MQ解决方案-概念篇

参考资料: 参考demo 参考视频1 参考视频2 官方文档(推荐) 官方文档中文版 关于Kafka和rabbitMQ的安装教程,见本人之前的博客 rocketMq的安装教程

6/5~6/6总结

创建存储过程 DELIMITER // CREATE PROCEDURE usingid() BEGIN SELECT AVG(id) FROM user; END // DELIMITER ; 要用DELIMITER //指定结束符为 "//", 要调用该存储过程&#xff1a; CAll usingid; 创建成功后在navicat里面的函数界面可以看见刚刚创建的存储过程…

传统制作 VS AI制作,如何一键制作PPT ?

教你如何快速的生成一个可用的 PPT&#xff0c;以及现在比较主流的 ChatGPT PPT 衍生工具推荐。 一、原理 结合AI生成 PPT 的原理其实非常简单&#xff0c; 现有的一些 PPT 软件或者开源工具会提供一种文本格式&#xff0c;我们只需要给出定固定的格式&#xff0c;把内容输入…

位运算总结

位运算 有符号整数无符号整数位移运算 1计算机中数字的表示 计算机只有0&#xff0c;1两个数字&#xff0c;所以我们常用的10进制计算 所以我们需表示10进制 要使用二进制来表示10进制数 进制表示法 我们假设一个 8 位的数据类型 方案1 2&#xff1a;0000 0010 我们会发现…

(三)CSharp-方法

一、实例字段和局部变量 实例字段局部变量生存期从实例被创建时开始&#xff0c;直到实例不再被访问时结束从它在块中被声明的那一刻开始&#xff0c;在块完成执行时结束隐式初始化初始化成该类型的默认值没有隐式初始化。如果变量在使用之前没有被赋值&#xff0c;编译器就会…

Azure Log Analytics:与Power BI集成

注&#xff1a;本文最初发布于https://d-bi.gitee.io, 2023年6月迁移至CSDN 前述 Azure Log Analytics是Azure Monitor中的一项分析服务。本文将讲述通过Log Analytics与Power BI集成的方式&#xff0c;获取Power BI工作区内的日志信息&#xff0c;包括各PBI数据集的CPU消耗&a…

【Leetcode】51 N皇后

完成过程中的一些问题&#xff1a; 一开始没有审题&#xff0c;只设置了两个数组判断行列上是否有元素&#xff0c;没有考虑斜线的问题。出现了行的重复&#xff0c;对行只需要递归&#xff0c;不需要循环。思路&#xff1a;按行摆放棋子&#xff0c;摆放棋子时检查列上和斜线…

Android 12.0 系统设置显示主菜单添加屏幕旋转菜单实现旋转屏幕功能

1.前言 在android12.0的系统rom定制化开发中,在对系统设置进行定制开发中,有产品需求要求增加 旋转屏幕功能的菜单,就是在点击旋转屏幕菜单后弹窗显示旋转0度,旋转 90度,旋转180度, 旋转270度针对不同分辨率的无重力感应的大屏设备的屏幕旋转功能的实现, 接下来就来分析…