Shell数组和冒泡知识点

Shell数组

应用场景:
获取数组长度
获取元素长度
遍历元素
元素切片
元素替换
元素删除

数组定义方法
方法一:数组名=(vlaue0 value1 value2 …)
方法二:数组名=([0]=value[1]=value[2]=value…)
方法三:
列表名=“value 0 value1 value 2…”
数组名=($列表名)
方法四:
数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”
数组包括的数据类型
数值类型
字符类型
使用“”或’'定义

操作

获取数组
${数组名[@/]}

获取数组长度
${数组名#[@/*]}

[root@server6 ~]# echo ${
    
    #a[@]}
5
[root@server6 ~]#  

读取某下标赋值
${数组名[下标]}

[root@server6 ~]# echo ${
    
    a[1]}
2
[root@server6 ~]# 

数组遍历

[root@server6 ~]# vim szbl.sh
#!/bin/bash
# 数组遍历
a=(1 2 3 4 5)
for num in ${
    
    a[*]}
do
        echo $num
done


[root@server6 ~]# chmod +x szbl.sh 
[root@server6 ~]# ./szbl.sh 
1
2
3
4
5
[root@server6 ~]# 

数组切片
${数组名[@/*]:起始位置:长度}
数组的替换
${数组名[@/ *]/查找字符/替换字符}
数组删除
unset

shell脚本调试

echo命令
bash命令
命令语法
sh [-nvx]脚本名
-n:不会执行该脚本,仅查询脚本语法是否有问题,如果没有语法问题就不会显示任何内容,如果有问题会提示报错。
-v:在执行脚本时,先将脚本的内容输出到屏幕上然后有错误,也会给出错误提示。
-x:将执行的脚本内容输出到屏幕上,这个是对调试很有用的参数。
set命令
set -x:开启调节模式
set +x:关闭调节模式

冒泡排序

小项目

需求:shell里给定值的比较

[root@server6 ~]#vim maopao.sh 

#!/bin/bash
# 冒泡排序
score=(70 30 40 100 50 60)
for ((i=1;i<${
    
    #score[*]};i++))
do
        for ((j=0;j< ${
    
    #score[*]}-$i;j++))
do
        if [ ${
    
    score[j]} -gt ${
    
    score[j+1]} ]
                then temp=${
    
    score[j]}
                        score[j]=${
    
    score[$(($j+1))]}
                        score[$(($j+1))]=$temp
        fi
done
done
echo ${
    
    score[*]}
[root@server6 ~]#chmod +x maopao.sh 
[root@server6 ~]#./maopao.sh 
30 40 50 60 70 100

再来一个小项目

需求:键盘输入数组值的比较

[root@server6 ~]#vim maopao.sh 
#!/bin/bash
# 键盘输入冒泡排序
k=0
while true
do
   read -p "是否需要输入数值?" do
    if [ $do == "no" ]
        then break
    fi
   read -p "请输入第$(($k+1))个元素" key
        score[$k]=$key
        let k++
done
for ((i=1;i<${
    
    #score[*]};i++))
do
        for ((j=0;j< ${
    
    #score[*]}-$i;j++))
do
        if [ ${
    
    score[j]} -gt ${
    
    score[j+1]} ]
                then temp=${
    
    score[j]}
                        score[j]=${
    
    score[$(($j+1))]}
                        score[$(($j+1))]=$temp
        fi
done
done
echo ${
    
    score[*]}
[root@server6 ~]#chmod +x maopao.sh 
[root@server6 ~]#./maopao.sh 
是否需要输入数值?y
请输入第1个元素40
是否需要输入数值?y
请输入第2个元素47
是否需要输入数值?y
请输入第3个元素29
是否需要输入数值?y
请输入第4个元素90
是否需要输入数值?y
请输入第5个元素74
是否需要输入数值?y
请输入第6个元素20
是否需要输入数值?y
请输入第7个元素82
是否需要输入数值?no
20 29 40 47 74 82 90

猜你喜欢

转载自blog.csdn.net/weixin_50346902/article/details/109734715
今日推荐