自学内容网 自学内容网

数组

1、定义

在集合当中指定多个元素,元素的类型:整数、字符串、浮点

2、作用

一次性的定义多个元素,可以为变量赋值提供便利

3、数组的定义方法

数组名不能重复

方法1:

数组名=(a b c d)

打印数组的值:echo ${数组名[*]}

                         echo ${数组名[@]}

方法2:

test1[0]=1

test1[1]=2

test1[2]=3

数组内部的元素值,从0开始

数组的长度指的是数组包含了几个元素

4、获取数组内有几个元素

echo ${#test2[*]}

echo ${#test2[@]}

5、查看数组内的指定元素

echo ${数组名[0]}

6、数组的遍历

test4=(1 2 3 4 5)

for num in ${test4[*]}

do

echo $num

done

7、数组的切片

test5=(1 2 3 4 5)
echo ${test5[*]:0:2} #0表示起始位置,2表示步长,起始位置0开始,包括0,移动2位
1 2

echo ${test5[*]:1:3}
2 3 4

8、数组的替换

8.1临时替换

echo ${test5[*]/4/99}

1 2 3 99 5

8.2永久替换

通过修改元素下标的值可以实现

test5[3]=99

echo ${test5[*]}

1 2 3 99 5

9、删除数组

9.1删除整个数组

unset test1

echo ${test1[*]}

9.2删除数组当中的元素

unset test5[3]

echo ${test5[*]}

1 2 3 5

10、数组追加

追加元素,根据下标的位置进行追加

方法1:

test5[3]=4
echo ${test5[*]}
1 2 3 4 5

test5[5]=6
echo ${test5[*]}
1 2 3 4 5 6

方法2:

test5+=(7 8)
echo ${test5[*]}
1 2 3 4 5 6 7 8

11、练习

练习1:定义一个数组,元素都是整数,实现数组内整数的累计和

​test1=(10 20 30 40 50)
sum=0
for i in ${test1[*]}
do
sum=$(($sum+$i))
done
echo $sum

练习2:把数组当中的奇数和奇数相加,偶数和偶数相加

test1=(10 15 40 61 31 42)
sum1=0
sum2=0
for i in ${test1[*]}
do
if [[ $i%2 -eq 0 ]]
then
sum1=$(($sum1+$i))
else
sum2=$(($sum2+$i))
fi
done
echo $sum1
echo $sum2

练习3:定义一个数组,使用条件判断找出数组内最大值和最小值

test1=(3 5 7 4 9)
max=${test1[0]}
min=${test1[0]}
for num in ${test1[*]}
do
if [ $num -gt $max ]
then
max=$num
fi
if [ $num -lt $min ]
then
min=$num
fi
done
echo $max
echo $min

12、冒泡排序

类似气泡上涌的工作,会将数组当中的元素按照从小到大,或者从大到小的顺序进行重新排序

思路:对比两个相邻的元素,以从小到大为例,满足交换条件的元素,小的往左移,大的往右移。

数组的位置发生变化(下标对应的元素的值发生变化)

使用双层循环,外部循环控制排序的轮次,内部循环比较两个元素的大小,决定时候互换位置

对比和交换的次数随着排序轮次而减少

test1=(20 10 60 40 50 30)
echo "原数组的排序为:${test1[*]}"
length=${#test1[*]}
for ((i=1;i<$length;i++))
do
for ((k=0;k<$length-i;k++))
do
first=${test1[$k]}
j=$(($k+1))
second=${test1[$j]}
if [ $first -gt $second ]
then
temp=$first
test1[$k]=$second
test1[$j]=$temp
fi
done
done
echo "排序后的数组值为:${test1[*]}" 

13、正则表达式

正则表达式匹配的是文本内容,linux的文本三剑客都是针对文本内容,都是按照行进行匹配

文本三剑客:

grep 过滤文本内容

sed 针对文本内容进行增删改查

awk 按行取列

grep的作用:使用正则表达式来匹配文本内容

13.1grep

-m:匹配几次之后停止 -m +数字

-v:取反

-n:显示匹配的行号

-c:只统计匹配的行数

-o:仅显示匹配的结果

-q:静默模式,不输出任何信息

-A +数字:after 后几行

-B +数字:before 之前的行

-C +数字:前后各几行

-e:或者

-E:匹配扩展正则表达式

-f:匹配两个文件相同的内容,以第一个文件为准

-r:递归目录,目录下的文件内容,软连接不包含在内

-R:递归目录,目录下的文件内容,包含软连接

13.2sort排序

sort:以行为单位,对文件内容进行排序

sort 选项 参数

cat file | sort 选项

-f:忽略大小写,默认会把大写字母排在前面

-b:忽略每行之前的空格(不是把空格删除,只是依然按照数字和字母的顺序排列)

-n:按照数字进行排序

-r:反向排序

-u:去重,相同的数据仅显示一行

-o:把排序后的结果转存到指定的文件

13.3uniq

去除连续重复的行,只显示一行

-c:统计连续重复的行的次数,合并连续重复的行

-u:显示仅出现一次的行(包括不是连续出现的重复行)

-d:仅显示连续重复的行(不包括非连续出现的内容)


原文地址:https://blog.csdn.net/QChestnut/article/details/139807586

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!