【LinuxShell】Shell编程之数组

shell读取文本每一行并转成数组 一个简单的shell脚本确实最常用的,有时候我们需要从文本中一行一行读取并存到数组里。假如我有一个文件叫list.txt,如果你是在linux上创建的文件请忽略这个步骤。假如我在windows上编辑过那么格式就不是linux上的unix格式了,我需要先转换格式为unix防止出现意想不到的错误。具体方法请看下面 应该会显示文件类型 这个时候我们需要借助vim的命令,如下操作 按住shift+冒号进入命令模式输入以下命令 最后wq保存,再使用file命令查看文件属性就变成unix格式了。 没有后面那一段提示了, 阅读详情


一、数组

  数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。

  组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。

  用于区分数组的各个元素的数字编号称为下标。元素的下标从0开始。

  数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。

二、数组的定义方式

方法一:直接定义参数。

数组名=(value0 value1 value2 ...)

方法二:使用下标值定义每个元素。

数组名=([0]=value [1]=value [2]=value ...)

方法三:先定义一个字符串列表,再引用列表的值定义数组。

列表名="value0 value1 value2 ..."
数组名=($列表名)

方法四:通过下标值,一个一个定义数组内的每个元素。同时也可以通过这种方式修改元素的值。

数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"

  其中方法四可以通过for循环来实现一键定义。

三、数组的相关概述

1.数组包括的数据类型

  数值类型:== 可以用于定义。

  字符类型:使用" " 或''定义,防止元素当中有空格,元素按空格分割

2.获取数组长度

echo ${#数组名[*]}  
echo ${#数组名[@]}

例如:

[root@localhost ~]# ary=(10 20 30 40)
[root@localhost ~]# echo ${#ary[*]}
4
[root@localhost ~]# echo ${#ary[@]}
4

3.获取数组数据列表

 echo ${数组名[@]}  
 echo ${数组名[*]}

例如:

[root@localhost ~]# ary=(10 20 30 40)
[root@localhost ~]# echo ${ary[*]}
10 20 30 40
[root@localhost ~]# echo ${ary[@]}
10 20 30 40

  注意:如果只是用普通变量的方式查看的,那么只会显示数组的第一个元素值。

[root@localhost ~]# ary=(10 20 30 40)
[root@localhost ~]# echo ${ary}
10

4.获取数据下标列表

echo ${!数组名[*]}
echo ${!数组名[@]}

例如:

[root@localhost ~]# ary=([1]=20 [0]=30 [3]=40 [4]=30)
[root@localhost ~]# echo ${!ary[*]}
0 1 3 4
[root@localhost ~]# echo ${!ary[@]}
0 1 3 4

5.获取某下标赋值

${数组名[n]}   #n代表元素的下标

例如:

[root@localhost ~]# ary=([1]=20 [0]=30 [3]=40 [4]=30)		#定义ary数组,跳过下标2的定义
[root@localhost ~]# echo ${ary[3]}							#输出ary[3]的值为40
40
[root@localhost ~]# echo ${ary[2]}							#输出ary[2]的值为空

  注意:当定义数组时少定义一个坐标的值,输出结果时查看该下标时,会显示为空。

6.如何判断数组是否缺少元素

方式一:查看最后一个元素值,可以判断数组的下标是否完整,若其中跳过某一些下标,则此方法无法取得最后一个元素值。

[root@localhost ~]# vim demo1.sh
#!/bin/bash 
ary=([1]=20 [0]=10 [3]=40 [4]=30) 							#定义一组数组,其中坐标为2的没有定义
length=${#ary[*]}											#获取ary数组的长度
lastcoordinate=$[length-1]									#获取最后一个元素的坐标
lastelement=${ary[$lastcoordinate]}							#获取最后一个元素的值
curlast=$(echo ${ary[@]} | awk '{print $NF}' )				#通过awk分割来获取输出的最后一个元素的值

echo "ary数组的值为:${ary[*]}"								#输出ary数组的元素值
    
if [ $lastelement -eq $curlast ];then						#判断获取最后一个元素的值与输出最后一个元素的值是否一致
    echo "ary数组是完整的"
else
    echo "ary数组缺少元素"
fi
[root@localhost ~]# bash demo1.sh
ary数组的值为:10 20 40 30
ary数组缺少元素

方式二:通过下标列表来判断是否缺少元素。

[root@localhost ~]# vim demo2.sh
#!/bin/bash
ary=([1]=20 [0]=10 [3]=40 [4]=30)							#定义一组数组,其中坐标为2的没有定义
coordinatenumber=${!ary[*]}									#获取数组的下标列表
length1=$(echo $coordinatenumber | awk '{print $NF}' )		#通过awk分割来获取最后一个坐标的值
length=$[ $length1 + 1 ]									#因为坐标的值是长度-1,所以反向得出数组的长度
length2=${#ary[*]}											#获取数组的实际长度
if [ $length1 -eq $length2 ];then							#判断通过坐标得出的长度与实际数组长度是否一致
echo "ary数组是完整的"
else
    echo "ary数组缺少元素"
fi
[root@localhost ~]# bash demo2.sh
ary数组缺少元素

  其中获取最后一个坐标的方式可以用echo $coordinatenumber | awk '{print $NF}'或者echo {$coordinatenumber##* }两种方式。

方式三:使用数组长度作为下标增加元素用来判断是否缺少元素

[root@localhost ~]# vim demo3.sh
ary=([1]=20 [0]=10 [3]=40 [4]=30)							#定义一组数组,其中坐标为2的没有定义
echo ${ary[@]}												#输出源数组
length=${#ary[@]}											#获取数组长度
ary[length]=70												#在数组最后追加元素
echo ${ary[@]}												#输出现在的数组
[root@localhost ~]# bash demo3.sh							#通过运行脚本可以发现最后一个元素改变了,说明此数组缺少元素
10 20 40 30
10 20 40 70

四、数组的操作

1.数组遍历

[root@localhost ~]# vim demo3.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
for i in ${arr1[*]}
do 
	echo $i
done
[ root@localhost ~]# bash demo3.sh
10
20
30
40
50
60

  如果想要求一组数组的总和也可以使用该方式来实现

[root@localhost ~]# vim demo3.sh
#!/bin/bash
arr1=(10 20 30 40 50 60)
for i in ${arr1[*]}
do 
	sum=$[sum+i]
done
echo "该数组的总和是 $sum"
[root@localhost ~]# bash demo3.sh
该数组的总和是 210

2.数组切片

${数组名[@或*]:起始位置:长度}

例如:

[root@localhost ~]# ary=(10 20 30 40 50 60)
[root@localhost ~]# echo ${ary[*]}
10 20 30 40 50 60
[root@localhost ~]# echo ${ary[@]:3:1}
40
[root@localhost ~]# echo ${ary[@]:2:3}
30 40 50

3.数组替换

${数组名[*或@]/源参数值/将要替换的参数值}

例如:

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# echo ${arr2[*]/3/66}
1 2 66 4 5
[root@localhost ~]# echo ${arr2[*]}
1 2 3 4 5
echo ${arr2[*}

  以上这种方式只是临时替换的方式,如果想要永久替换可通过()重新赋值实现。例如:

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# echo ${arr2[*]}
1 2 3 4 5
[root@localhost ~]# arr=(${arr[*]/3/66})
[root@localhost ~]# echo ${arr[*]}
1 2 66 4 5

  如果想要替换的字符在数组中匹配有多项,则均都会替换。例如:

[root@localhost ~]# arr=(10 20 30 40 50)
[root@localhost ~]# echo ${arr2[*]}
10 20 30 40 50
[root@localhost ~]# arr=(${arr[*]/0/8})
[root@localhost ~]# echo ${arr[*]}
18 28 38 48 58

4.数组删除

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# unset arr		#删除数组
[root@localhost ~]# echo ${arr[@]}

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# unset arr[2]	#删除第三个元素
[root@localhost ~]# echo ${arr[*]}
1 2 4 5

5.数组追加元素

方法一:使用下标直接赋值增加元素

[root@localhost ~]# ary=(10 20 30 40 50 60)
[root@localhost ~]# echo ${!ary[*]}
0 1 2 3 4 5
[root@localhost ~]# ary[6]=70
[root@localhost ~]# echo ${ary[@]}
10 20 30 40 50 60 70

方法二:使用数组长度作为下标增加元素,这种方式只能用作完整数组。

[root@localhost ~]# ary=(10 20 30 40 50 60)
[root@localhost ~]# echo ${#ary[@]}
6
[root@localhost ~]# ary[${#ary[@]}]=70
[root@localhost ~]# echo ${ary[@]}
10 20 30 40 50 60 70

方法三:直接将源数组放入追加数组的定义列表中

[root@localhost ~]# ary=(10 20 30 40 50 60)
[root@localhost ~]# ary=("${ary[@]}" 70 80 90)
[root@localhost ~]# echo ${ary[@]}
10 20 30 40 50 60 70 80 90

  其中""不能省略,否则,当数组中存在包含空格的元素时会按空格将元素拆分成多个。不能将@替换为*,如果替换为*,不加双引号时与@的表现一致,加双引号时,会将数组array_name中的所有元素作为一个元素添加到数组中。

例如:

[root@localhost ~]# ary=('zhang san' 'li si' 'wang wu')
[root@localhost ~]# echo ${ary[@]}					#从屏幕echo输出结果会误认为6个元素
zhang san li si wang wu
[root@localhost ~]# echo ${!ary[@]}					#实际根据坐标列表查看只有3个元素
0 1 2
[root@localhost ~]# ary1=(${ary[@]})				#如果不加双引号赋值给其他数组
[root@localhost ~]# echo ${#ary1[@]}				#那么经过赋值过后重新输出会有6个元素
6
[root@localhost ~]# ary=('zhang san' 'li si' 'wang wu')
[root@localhost ~]# echo ${ary[@]}					#从屏幕echo输出结果会误认为6个元素
zhang san li si wang wu
[root@localhost ~]# echo ${!ary[@]}					#实际根据坐标列表查看只有3个元素
0 1 2
[root@localhost ~]# ary1=(“${ary[*]}”)				#如果加双引号使用*赋值给其他数组
[root@localhost ~]# echo ${#ary1[@]}				#那么经过赋值过后重新输出只会有一个元素
1

方法四:直接添加需要追加的元素

[root@localhost ~]# ary=(10 20 30 40 50 60)
[root@localhost ~]# echo ${ary[@]}
10 20 30 40 50 60
[root@localhost ~]# ary+=(70 80 90)
[root@localhost ~]# echo ${ary[@]}
10 20 30 40 50 60 70 80 90

  待添加元素必须用"()"包 围起来,并且多个元素用空格分隔。若追加多个参数,此方式效率最高,执行较为方便。

五、函数与数组的使用

1.向函数传数组参数

  如果将数组变量作为函数参数,函数只会取数组变量的第一个值。

[root@localhost ~]# vim demo4.sh
test1(){
	echo "接收到的参数列表:$@"					   #输出test获取到的数组列表
	newarrary=($1)								#获取函数体外后面的第一个位置变量即$array
	echo "新数组的值为:${newarrary[*]}"			#输出重新赋给新变量的数组列表
}
array=(3 2 1 4 5)								#定义一组数组
echo "原始数组的值为:${array[*]}"					#输出原始数组列表
test1 $array									#调用函数以及使用数组作为位置变量
[root@localhost ~]# bash demo4.sh 
原始数组的值为:3 2 1 4 5
接收到的参数列表:3
新数组的值为:3

  解决这个问题则需要将数组变量的值分解成单个的值,然后将这些值作为函数参数使用。在函数内部,再将所有的参数重新组合成一个新的数组变量。

[root@localhost ~]# vim demo4.sh
test1(){
	newarrary=($(echo $@))						#分别获取数组的参数
	echo "新数组的值为:${newarrary[*]}"			#输出新的数组的值
}
array=(3 2 1 4 5)					 	 		#定义一组数组
echo "原始数组的值为:${array[*]}"					#输出原数组的值
test1 ${array[*]}								#调用函数以及使用数组作为位置变量
[root@localhost ~]# bash demo4.sh 
原始数组的值为:3 2 1 4 5
新数组的值为:3 2 1 4 5

  使用$@、 $# 、$1查看从数组向函数传参数的结果。

[root@localhost ~]# vim demo4.sh
#!/bin/bash
test1(){
        echo $1
        echo $@
        echo $#
}
arr=(10 20 30 40 50)
test1 ${arr[@]}
[root@localhost ~]# bash demo4.sh 
10												#$1是获取数组的第一个参数的值
10 20 30 40 50									#$@是获取数组的第一个参数的值
5												#$#是获取数组的长度

2.从函数返回数组

[root@localhost ~]# vim demo4.sh
#!/bin/bash
test1(){
	newarrary=($@)								#获取函数体外定义的数组列表值,将newarrary也定义为一个数组
	sum=0										#定义一个获取和的变量
	for value in ${newarrary[*]}				#使用for循环在函数体内的数组列表中取值
	do
		sum=$[$sum + $value]					#将函数体内的数组列表的值进行加法求和
	done
	echo $sum									#输出求和结果
}
array=(10 20 30 40 50)							#定义一组函数
echo "原始数组的值为:${array[*]}"					#输出原始数组的值
result=`test1 ${array[*]}`						#获取函数体内输出的求和结果赋给一个变量
echo "新数组的和为:$result"						#输出变量,变量是求和结果的值
[root@localhost ~]# bash demo4.sh 
原始数组的值为:10 20 30 40 50
新数组的和为:150

六、数组排序算法

1.冒泡排序

  类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断地向前移动。

基本思想

  冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。

算法思路

  冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序,而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数排序轮数而减少。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rNlu5cb4-1683685097420)(C:\Users\86138\AppData\Roaming\Typora\typora-user-images\image-20230510101600649.png)]

具体过程如下:

#!/bin/bash
array=(63 4 24 1 3 15)
echo "old_array: ${array[*]}"
length=${#array[*]}
#定义比较轮数,比较轮数为数组长度减1,从1开始
for ((i=1; i<$length; i++))
do
	#确定比较元素的位置,比较相邻两个元素,较大的数往后放,比较次数随比较轮数而减少
	for ((j=0; j<$length-i; j++))
	do
		#定义第一个元素的值
		first=${array[$j]}
		#定义第二个元素的值
		k=$[$j+1]
		second=${array[$k]}
		#比较两个相邻元素的值,如果第一个元素比第二个元素大就互换
		if [ $first -gt $second]
		then
			#把第一个元素值保存到临时变量中
			temp=$first
			#把第二个元素值赋给第一个元素
			array[$j]=$second
			#把临时变量(也就是第一个元素值)赋给第二个元素
			array[$k]=$temp
		fi
	done
done
#输出排序后后的数组
echo "new_arrays: $(array[*])"

2.直接选择排序

  与冒泡排序相比,直接选择排序的交换次数更少,所以速度会快些。

基本思想

  将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。

算法思路

  直接排序由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为只需要对比到最后一位,最后一位的坐标为长度减1,同时数组已经完成排序。而内部循环主要用于对比当前轮次数组中的最大元素的值,找出对应最大元素的值赋给定义最大元素的下标,最后通过最大元素与当前轮次数组最后一个元素做交换得到由小到大排序的数组。

在这里插入图片描述

具体过程如下:

#!/ bin/bash
#定义一组数组
array=(63 4 24 1 3 15)
#获取数组长度
length=${#array[*]}
#定义排序轮数,为数组长度减1,且从1开始
for((i=1; i<$length; i++))
do
	#定义一个每轮循环比较的初始最大元素的下标,从0开始,即第一个元素
	index=0
	#确定用于第一个元素与当前最大元素作比较的索引范围,从1开始,且每轮比较的最后一个元素下标会随着轮数增加而减少
	for ((j=l; j<=$length-i; j++))
	do
		#通过比较获取最大值元素的索引位置
		if [ ${array[$j]} -gt $ {array[$index]} ] ;then
		index=$j
		fi
	done
	#获取每轮最后一个元素的索引
	last=$[$length - $i]
	#把当前轮次的最后一个元素的值保存在临时变量中
	temp=${array[$last]}
	#把最大的元素的值赋给当前轮次的最后一个元素
	array[$last]=${array[$index]}
	#将临时变量的值,即原最后一个元素的值交换
	array[$index]=$temp
done
echo "排序后的数组的值为:${array[@]}"

3.插入排序

  插入排序,又叫直接插入排序。实际中,我们玩扑克牌的时候,就用了插入排序的思想。

基本思想:

  在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。按照此法对所有元素进行插入,直到整个序列有序。

  但我们并不能确定待排元素中究竟哪一部分是有序的,所以我们一开始只能认为第一个元素是有序的,依次将其后面的元素插入到这个有序序列中来,直到整个序列有序为止。

在这里插入图片描述

具体过程如下:

#!/ bin/bash
#定义一组数组
array=(63 4 24 1 3 15)
#获取数组长度
length=${#array[*]}
#定义待排序的元素下标位置
for((i=1; i<$length; i++))
do
	#定义已排好的序列的元素下标位置范围
	for ((j=0; j<=i; j++))
	do
		#将待排序的元素和前面已经排序好的元素依次比较, 较小的数会交换到已排好序列的元素位置,较大的数会放到待排序元素位置
		if [ ${array[$i]} -lt ${array[$j]} ] ;then
			temp=${array[$i]}
			array[$i]=${array[$j]}
			array[$j]=$temp
		fi
	done
done
echo "排序后的数组的值为:${array[@]}"

4.反转排序

  以相反的顺序把原有数组的内容重新排序。

基本思想:

  把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换。

具体过程如下:

#!/bin/bash
#定义一组数组
array=(10 20 30 40 50 60)
#获取数组长度
length=${#array[*]}
#定义
for ((i=0; i<$length/2; i++))
do
	#定义一个临时变量获取第一个元素的值
	temp=${array[$i]}
	#获取当前轮数的最后一个元素下标,会随着轮数的增加而减少
	last=$[length-$i-1]
	array[$i]=${array[$last]}
	array[$last]=$temp
done
echo "排序后数组的值为:${array[*]}"
BLE透传速率调优(二) 摘要:本文分析了蓝牙协议中MDbit=1时应连续发送多包但实际只发一包的问题。通过波形分析和代码调试,发现问题的根源在于接收端出现sync error导致提前关闭接收窗口,而非发送端问题。最终通过调整RF时序参数(将rxpathdly改为13us)解决了TX到RX转换的同步问题,使连接事件能正常发送多个数据包,传输速率提升至70kb/s。文中详细记录了使用逻辑分析仪和trace宏调试的过程,揭示了CEVA芯片设计中TX中断与ACK接收的关联特性。 阅读详情

相关推荐

EWF写保护功能详解:从安装到实战操作指南

本文详细介绍了EWF写保护功能的安装与实战操作指南。EWF(Enhanced Write Filter)通过重定向写入操作保护硬盘分区,特别适合需要长期稳定运行的系统场景。文章涵盖从安装准备、图形界面操作到命令行高级管理的全流程,并提供了常见问题的解决方案,帮助用户轻松掌握这一实用工具。

weixin_28710999的博客 446

【Linux】shell编程—数组

shell编程—数组

h15162064289的博客 2961

安卓直链APK安装拦截全解析:从Play Protect到厂商管控的应对指南

在移动应用分发领域,APK(Android Package)安装是开发者与用户交互的关键环节。其核心原理涉及安卓系统的安全沙箱机制与权限管理体系,旨在保护用户设备免受恶意软件侵害。这一机制的技术价值在于平衡了应用生态的开放性与安全性,但也在应用推广、企业内部分发等场景中带来了挑战。尤其在通过官网、广告等直链渠道分发APK时,常会遇到安装转化率骤降的问题。这背后主要受到Google Play Protect云端扫描、安卓系统安装权限模型演进(如Android 8.0+的安装源授权)以及设备制造商附加安全层(如

weixin_33894640的博客 469

Linux shell数组

数组的定义格式: 数组名=(值1,值2 .....值n) 例子:array_name=(v0,v1,v2,v3) 这样就创建了一个包含字符串的数组 数组单个元素的修改 我们还可以单独操纵数组中的元素如: array_name[0]=value1,这样就可以已经创建的数组的第一个元素修改为value1 数组元素的读取 xxx=${array_name[0]} :这样数组中的第一个元素将会赋值给xxx echo ${array_name[@]} :这样会将数组中的所有元素进行输出 .

qq_47529104的博客 1723

2024年数字IC秋招-速腾聚创-数字芯片验证工程师-笔试题

笔试题型:单选 + 问答题笔试平台:牛客(手机+电脑监控)笔试时间:1hA. len取10的概率是1/2;B. len取10的概率是1/3;C. len取10的概率是1/4;D. len取10的概率是1;

qq_42135020的博客 1399

model_optimizer将pi05端到端延时进一步优化到68.13ms了

目前在保持灵活性和性能之间找到一个较好的平衡。vit, llm仍然使用onnx->trt_engine的路径,量化可以通过https://github.com/NVIDIA/Model-Optimizer.git支持。同时支持通过cutedsl手写算子进行进一步优化denoise因为步数多,kernel launch多,因此完全通过手写融合算子实现,将所有steps进行一次大的cuda graph capture.

happyAnger6的专栏 59

Linux之shell中的 数组

文章目录shell中的 数组1.数组的定义2.数组的定义2.1用小括号将变量值括起来赋值给数组变量2.2采用键值对的形式赋值2.3通过分别定义数组变量的方法来定义2.4动态地定义数组变量3.数组的打印4.数组元素添加5.数组元素的删除6..数组的赋值7.数组内容的截取和替换7.1 截取7.2数组元素的替换8.统计数组元素的个数9.栗子 shell中的 数组 1.数组的定义 在shell的数组...

weixin_43936969的博客 1180

【思考模型框架】MECE原则,确保分析时,考虑到的所有因素,既不重叠又无遗漏

MECE原则,是Mutually Exclusive and Collectively Exhaustive的缩写,中文译为“相互独立、完全穷尽”。MECE原则,这是一种逻辑思维和组织信息的方法,旨在确保分析时既没有遗漏也没有重复。MECE原则,相互独立、完全穷尽(Mutually Exclusive,Collectively Exhaustive)的原则MECE原则,确保分析时考虑到的所有因素既不重叠又无遗漏。

奶爸的编程之路,也就一周冷个三天 2754

Linux | shell脚本之数组

目录 [隐藏] 创建数组 读取数组 读取单个元素 读取所有成员 默认位置 数组的长度 提取数组序号 提取数组成员 追加数组成员 删除数组 关联数组 1.创建数组 数组可以采用逐个赋值的方法创建。 ARRAY[INDEX]=value 上面语法中,ARRAY是数组的名字,可以是任意合法的变量名。INDEX是一个大于或等于零的整数,也可以是算术表达式。注意数组第一个元素的下标是0, 而不是1。 下面创建一个三个成员的数组。 $ array[0]=val $ arra

m0_59388634的博客 4954

uniapp | 基于高德地图实现位置选择功能(安卓端)

在uni-app项目中实现地图位置选择功能的解决方案。由于uni.chooseLocation功能受限,采用高德地图API自主开发。系统由父组件poiMap.vue(负责展示和跳转)和子组件poiBox.vue(核心地图逻辑)构成,通过父子组件通信传递位置数据。关键技术包括:1)使用AMapLoader动态加载地图SDK;2)集成PositionPicker实现拖拽选点;3)异步加载AMapUI插件;4)通过事件监听获取位置详情(地址/经纬度)。

大胆尝试,小心实践 733

C# MVVM的“核武器”:CommunityToolkit.Mvvm的RelayCommand实战全解

你默默打开VS:“该用RelayCommand的‘量子纠缠’魔法了!用户点击按钮无响应,调试器显示命令未绑定,但代码看起来完美无缺。“我的MVVM应用?那可是能穿越线程的命令量子计算机!异步操作阻塞了UI线程,用户界面变成“加载中”死循环。:UI与业务逻辑通过命令“量子隧道”解耦。:所有长时间操作自动进入“量子跃迁”模式。:携带任意上下文的“量子信封”传递。:命令可用性随数据变化实时同步。

java专栏 663

Linux3.3Shell编程之循环语句与函数

for循环语句、while循环语句、continue跳出循环、break打破循环、死循环、until循环语句、Shell函数、递归函数、目录函数、数组、数据的数据类型、获取数组长度、获取数组列表、获取数组下标、读取某下标赋值、数组遍历、数组切片、数组替换、数组删除、数组追加元素、向函数传数组参数、从函数返回数组、冒泡排序、直接选择排序 、反转排序

wfwj_的博客 1064

【PySide6拓展】初识QChart图表

在 PySide6 中,QtCharts模块提供了一系列强大的类,用于创建和管理图表。QChart是这个模块的核心类,它可以帮助开发者轻松地实现数据的可视化。本篇文章将介绍如何使用 PySide6 的QtCharts模块,并通过一个简单的示例教你如何快速引入QChart。QChart折线图柱状图饼图区域图它能够直观地呈现数据,同时支持交互功能,如缩放、拖拽和工具提示等。通过引入QChart,我们可以轻松实现数据的可视化,提升应用的交互性和用户体验。结合其他QtCharts。

m0_62599305的博客 822

<Zhuuu_ZZ>Linux Shell编程变量的定义及运算

Linux Shell编程变量的定义及运算一.概念二.应用场景三.第一个Shell脚本四.变量1.变量的定义1.1 直接赋值法1.2 引用赋值法2.执行变量的运算2.1 对变量2.2对数组2.3对文件2.4 对传递参数2.5 预定义变量 一.概念 Shell脚本是包含一系列命令的文本文件 Shell读取此文件并执行命令 二.应用场景 重复性操作 批量事务处理 自动化运维 定时任务执行 三.第一个Shell脚本 1.#!/bin/bash是每一个shell必须有的头的定义,其中#!是一个约定的标记,它告诉系

Zhuuu_ZZ的博客 468

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

实战篇!Linux shell 脚本详解

来源:入门小站一、shell 入门简介1.1 什么是 shellshell 脚本简介#为啥介绍shell 上次出了一篇linux 命令详解,得到了很多小伙伴的认可,有部分粉丝私信我,让我出一份shell 编程。进过一段时间准备,花了2周时间,整理了一篇shell 入门到实战的博文,欢迎大家阅读,指点。 #什么是shell 网上有很多shell 的概念介绍,其实都很官方化,如果你对linux...

关注微信公众号【开源Linux】,后台回复『10T』,领取10T学习资源大放送,涵盖Linux、虚拟化、容器、云计算、网络、Python、Go等书籍和视频 5621

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux Shell编程入门到实战(二)

Shell字符串及数组操作

总结分享 809

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Linux进阶(Shell编程学习一)

由于shell脚本在java项目运维方面极其重要,比如服务的启动脚本,日志的分割脚本,文件的管理脚本大多都是shell脚本去实现的。所以作为java开发者懂linux的基本命令,会基本的shell编程是必要的。 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

JAVA领域优质创作者,基于分片网络查询方法专利发明者。 795

linux shell脚本编程

1) 在shell编程中通常使用全大写变量,方便识别$ COUNT=12) 变量的调用:在变量前加$3) Linux Shell/bash从右向左赋值$Y=y$ X=$Y$ echo $Xy4) 使用unset命令删除变量的赋值$ Z=hello$ echo $Zhello$ unset Z$ echo $Z。

qq_36091214的博客 1729

Shell脚本编程进阶

Shell脚本编程进阶一.循环1.for循环定义dodonefor循环中LIST列表的生成方式(3) 使用可以返回列表的命令(4) 使用glob,如:*.sh(5) 变量引用for特殊格式定义及使用for ((控制变量初始化;条件判断表达式;控制变量的修正表达式));do循环体doneeg:for ((i=0;i < 10;i++));doecho i=$idone2.while循环while循环定义dodone。

wang11876的博客 587

HDFS上传linuxSHELL

HDFS上传 1_hadoop fs -mkdir /test (在hadoop创建一个文件) 2_ hadoop fs -ls /test(浏览文集夹) 3_ hadoop fs -put jdk-8u192-linux-x64.tar.gz /test(上传到指定文件夹) 4_hadoop fs -lsr /(递归查看所有文件和目录) 5_hadoop fs -cat /test/a.txt(...

weixin_44856660的博客 181

Linux-Shell语法(上)

shell是我们通过命令行与操作系统进行沟通的语言,shell脚本可以直接在命令行中执行,也可以将一套逻辑组成一个文件,方便复用。Linux中常见的脚本有很多种,本篇以bash为例.文件开头需要写/bin/bash指明bash为脚本解释器chmod +x test.sh # 使脚本具有可执行权限./test.sh # 当前路径下执行~/test.sh # 家目录路径下执行bash test.sh #用解释器执行name1='abc' # 单引号定义字符串。

m0_64335844的博客 111

Linux--shell学习笔记(上)

定义变量,不需要加****name1 = 'xhl' # 单引号定义字符串 name2 = "xhl" # 双引号定义字符串 name3 = xhl # 也可以不加引号, 同样表示字符串数组用小括号表示,元素之间用空格隔开。

程序员小火龙的知识分享 1219

[博学谷学习记录] 超强总结,用心分享 | Linux shell基础

shell是用C语言编写的程序,它是用户使用 Linux 的桥梁。Shell既是一种命令语言,又是一种程序设计语言。

认知 行动 坚持 282

Linux Shell 学习记录 (一、小试牛刀)

本文为Linux Shell脚本攻略的学习记录,本章为shell入门,包括命令行说明、终端打印、数学计算、介绍文件重定向、数组、函数与参数等入门命令介绍并尝试测试使用

u010173388的博客 235

Linux Shell 脚本入门到实战详解【强烈建议收藏】

chmod命令可以用来修改用户对某个文件活文件夹的权限Linux系统中,文件的基本权限由9个字符组成,以rwxrw-r-xr --> 4w --> 2x --> 1拿rwxrw-r-x所有者 = rwx = 4 +2+1 = 7 所属组 = rw- = 4 +2 = 6 其他人 = r-x = 4 +1 = 5所以,此权限对应的权限值就是765。rwx分别表示读、写、执行权限系统变量。

longge2018的博客 1847

c高级 day3

echo ${11}

weixin_50022690的博客 238
上一篇: 【LinuxShell】Shell编程之循环语句实验题汇总
下一篇: 【LinuxShell】Shell编程之正则表达式
我的宝贝大唐
博客等级 码龄7年 96粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的宝贝大唐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值