shell脚本之数组

数组:
    一堆变量的集合。

声明:
        declare -a ARRAYNNAME
        其中每个变量为ARRAYNAME[INDEX]
        INDEX从0开始。

赋值:
        ARRAYNAME[INDEX] = VALUE
        ARRAYNAME = (VALUE1 VALUE2 ...)
        ARRAYNAME = ( [INDEX1]=VALUE1 [INDEX2]=VALUE2 ...)

特殊引用方法:
        ${#ARRAYNAME} 显示第一个元素的字符长度。
        ${#ARRAYNAME[INDEX]} 显示INDEX个元素的字符长度

${#ARRAYNAME[*]} 显示数组中值不为空的元素的个数
        ${#ARRAYNAME[@]} 显示数组中值不为空的元素的个数

信号捕捉:
    常见的信号:
        1.SIGHUP
        2.SIGINT
        9.SIGKILL
        15.SIGTERM
        18.SIGCONT
        19.SIGSTOP

其中,SIGKIL和SIGTERM一般不允许捕捉。

#trap ‘ACTION’ SIGTYPE

实例:
    1.创建数组,并显示数组中的元素
        #vim 1.sh
            #!/bin/bash
            AA=([0=jerry [1]=tom [5]=mike])
            echo ${AA[0]}
            echo ${AA[4]}
        #bash 1.sh
            jerry

2.随机显示其中的变量:
        #vim 1.sh
            #!/bin/bash
            INDEX=$[$RANDOM%7]
            AA=([0=jerry [1]=tom [5]=mike])
            echo ${AA[$INDEX]}

3.随机显示30次
        #vim 1.sh
            #!/bin/bash

AA=([0=jerry [1]=tom [5]=mike])
            for  I in {1..20} ; do
                INDEX=$[$RANDOM%7]
                echo ${AA[$INDEX]}
            done

4.显示数组中值不为空元素的个数,及某个元素字符的长度
        #vim 1.sh
            #!/bin/bash
            AA=([0=jerry [1]=tom [5]=mike])
            echo${#AA}
            echo ${AA[3]}
            echo ${AA[@]}
        #bash 1.sh
            5
            0
            3

5.从数组中选择5个不同元素

6.生成一组随机数,并找出其中的最大数
        #vim findmax.sh
            #!/bin/bash

for I in {0 .. 9} ;do
                ARR[$I]=$RANDOM
                echo -n "${ARR[$I]}"
            done
            echo

declear -i MAX=${ARR[0]}
            INDEX=$[${#ARR[*]}-1]
            for  I in `seq 1 $INDEX` ;do
                if [ $MAX -it ${AAR[$I] ] then
                    MAX=${AAR[$I]
                fi
            done

echo $MAX

#bash findmax.sh
            92

7.生成一个数组,个数用用户输入。数组中的元素不能相同。生成后显示数组中元素的值
        #vim 2.sh
            #!/bin/bash
            function COMP {
                for K in `seq 0 $[${#ARR[*]}-1]` ;do
                    if [ $1 -eq $ARR[$K] ] then
                        return 1
                    fi
                done

return 0
            }

read -p "Enter the sum of array" SUM
            declare -a ARR

for I in `seq 0 $[$SUM-1]`;do
                while ture;do
                    ELE=$RANDOM
                    COMP $ELE
                    if [ $? -eq 0 ];then
                        break
                    fi
                done
                $ARR[$I]=$ELE
                echo ${ARR[$I]}
            done

8.实现信号捕捉,按下ctrl+c不取消。
        #vim findmax.sh
            #!/bin/bash
            trap ‘echo “no quit!” ’ INT
            for I in {0 .. 9} ;do
                ARR[$I]=$RANDOM
                echo -n "${ARR[$I]}"
            done
            echo

declear -i MAX=${ARR[0]}
            INDEX=$[${#ARR[*]}-1]
            for  I in `seq 1 $INDEX` ;do
                if [ $MAX -it ${AAR[$I] ] then
                    MAX=${AAR[$I]
                fi
            done
            echo $MAX

#bash findmax.sh
            ctrl+c
            no quit!

9.实现信号捕捉
        #vim test.sh
            #!/bin/bash
            trap ‘rm -rf /tmp/test;echo "clean ok";exit 5‘ INT
            mkdir -p /tmp/test
            while ture;do
                touch /tmp/test/file-`date =%F-%H-%M-%S`
                sleep 2
            done

10.使用函数改写上述脚本
        #vim test.sh
            #!/bin/bash
            function CLEAN()){
                rm -rf /tmp/test
                echo "clean ok"
            }

trap ‘$CLEAN;exit 5‘ INT
            mkdir -p /tmp/test
            while ture;do
                touch /tmp/test/file-`date =%F-%H-%M-%S`
                sleep 2
            done

时间: 2024-10-06 11:53:04

shell脚本之数组的相关文章

Linux中的shell脚本编程——数组 ,高级字符串操作 ,高级变量 ,配置用户环境

概述: 概述: 本章节将讲述Linux中shell脚本编程的数组,高级字符串处理,高级变量和配置用户的环境. 一.函数和位置参数扩展 1.shift 命令实现在位置参数中的跳跃,会把最左边的参数挤掉     2.匿名函数的使用 第一篇:数组 一.数组的定义: 1.变量:存储单个元素的内存空间 2.数组:存储多个元素的连续的内存空间,相当于多个变量的集合. 3.数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开

shell 脚本-关联数组

shell 的关联数组 Shell Associative Array   bashi没有原生的对于类似hash table的支持,不像perl或python.下标数组元素是通过数组下标(数组下标可以是算术表达式,其结果必须是一个整数)来访问的,但是这种访问方式在表达某些关联性很强的数据时会存在限制.shell 提供了另外一种数组,其可以使用任意的字符串作为下标(不必是整数)来访问数组元素.这种数组叫做关联数组(associative array).关联数组的下标和值称为键值对,它们是一一对应的

shell 脚本之数组 和 yum 【下】

数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的 集合. 数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式 ,即为关联索引,bash4.0版本之后开始支持. bash的数组支持稀疏格式(索引不连续) 声明数组: declare -a ARRAY_NAME declare -A ARRAY_NAME: 关联数组 数组赋值 数组元素的赋值: (1) 一次只赋值一个元素: ARRAY_NAME[INDEX]=VA

18 shell脚本--009数组与字符串

回顾: 函数:写一个代码块,用来重复调用的: 1.函数的写法格式 2.参数,在函数名后面直接加,即可:如果在外面 abc(){ 函数体 [email protected] } abc 1 2 3 4 5 :wq a.sh 1 2 3 4 5 6 3.变量 local本地变量 local i=1 如果在函数体外同样也定义了一个相同的变量 扩展:source / bash / chmod+x 全路径 [父子进程的问题] 4.return 结束函数体的执行 和exit 的却别 return 和 exi

Shell脚本(五)数组

平时写脚本还没有用到过数组,暂时先记录下用法. #!/bin/bash array1=(1 2 3 4 5) array1_length=${#array1[@]} echo "array1 length: ${array1_length}" for item in ${array1[@]} do echo "current item of array1: ${item}" done array2[0]="test0" array2[1]=&qu

shell脚本编程数组

数组: 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组名和索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持 bash的数组支持稀疏格式(索引不连续) 声明数组: declare -a ARRAY_NAME:普通数组(声明可有可无) declare -A ARRAY_NAME: 关联数组(必须先声明才可用) 注意:两者不可相互转换 数组赋值 单个赋值:weekda

shell脚本练习--数组

问题描述:某个员工的linux系统有大量重复的软件(版本不同),导致使用yum安装软件时报错.现在需要将重复的软件找出来,将低版本的软件删掉.执行rpm -qa | sort 显示如下: [[email protected] ~]# rpm -qa | sort a52dec-0.7.4-27.el7.x86_64 aalib-libs-1.4.0-0.22.rc5.el7.x86_64 abattis-cantarell-fonts-0.0.25-1.el7.noarch abrt-2.1.1

shell脚本基础--数组

q1.数组 我们知道,变量就是内存里的存储空间,每个变量只可以存储一个数据,进行一次性的赋值操作,那么遇到一些需要连续存储并读取的任务时,如果还是依靠变量进行多次存储,既不会保证内存空间的连续性,也大大降低了CPU的效率,这时就需要数组这一类型的变量出马了! 数组变量: 数组简单来说就是存放一个或多个元素的连续的内存空间,相当于多个变量的集合: 数组的索引有以下方式: 1.数字索引.称为索引数组 Index ARRAY: 0,1,2,3.... 2.名称(字符串): 称为关联数组 Related

Shell脚本编程——数组(array)

数组与变量的区别 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合 数组=数组名+索引 索引:编号从0开始,属于数值索引 注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持    bash的数组支持稀疏格式(索引不连续) 定义数组 declare -a ARRAY_NAME:普通数组 declare -A ARRAY_NAME: 关联数组  数组元素的赋值:  (1) 一次只赋值一个元素:   ARRAY_NAM