• shell数组


    shell数组

    • shell数组可以存放多个值
    • shell数组可以存放多种类型
    • shell数组初始化不需要定义数组大小和类型
    • shell只支持一维数组
    • shell数组下标从0开始

    shell数组的定义

    shell数组可以使用括号包裹数组元素进行定义和初始化,数组元素之间使用空格分隔

    [root@charramma ~]# name=(Tom 'Jerry' "David")
    [root@charramma ~]# num=(11 22 33 44 55)
    [root@charramma ~]# arr=(123 'hello' world)
    [root@charramma ~]# echo ${name[*]}
    Tom Jerry David
    [root@charramma ~]# echo ${num[*]}
    11 22 33 44 55
    [root@charramma ~]# echo ${arr[*]}
    123 hello world
    

    也可以使用索引进行定义。如果该索引上没有数组元素就是定义,如果有数组元素就是替换。

    [root@charramma ~]# name[3]=Nick
    [root@charramma ~]# echo ${name[*]}
    Tom Jerry David Nick
    [root@charramma ~]# name[2]=George
    [root@charramma ~]# echo ${name[*]}
    Tom Jerry George Nick
    

    shell数组的使用

    #!/bin/bash
    
    # 定义数组
    num=(12 34 56 78)
    
    # 打印输出所有数组元素
    echo "数组num的元素有:${num[*]}"
    echo "数组num的元素有:${num[@]}"
    
    # 打印输出第一个数组元素
    echo "数组num第一个元素为 $num"
    echo "数组num第一个元素为 ${num[0]}"
    
    # 获取数组长度
    echo "数组num的元素个数为:${#num[*]}"
    echo "数组num的元素个数为:${#num[@]}"
    
    # 向数组头部插入数组
    num=(11 ${num[*]})
    echo "在数组头部插入11:${num[*]}"
    # 向数组尾部插入数组
    num=(${num[*]} 99)
    echo "在数组尾部插入99:${num[@]}"
    
    # 删除数组元素
    unset num[1]
    echo "删除第2个数组元素后,数组num的元素有:${num[*]}"
    
    # 删除数组
    unset num
    echo "数组已被删除:${num[*]}"
    

    执行脚本

    [root@charramma ~]# sh arr.sh 
    数组num的元素有:12 34 56 78
    数组num的元素有:12 34 56 78
    数组num第一个元素为 12
    数组num第一个元素为 12
    数组num的元素个数为:4
    数组num的元素个数为:4
    在数组头部插入11:11 12 34 56 78
    在数组尾部插入99:11 12 34 56 78 99
    删除第2个数组元素后,数组num的元素有:11 34 56 78 99
    数组已被删除:
    [root@charramma ~]# 
    

    附:我做过的一道面试题

    在面试一家公司的时候做过这样一道笔试题:

    假如有一个文件a.txt,内容为9,13,51,60,编写test.sh脚本,要求执行脚本后输出结果如下:
    9是小于50的
    13是小于50的
    51是小于50的
    60是大于50的

    这题就可以用到数组,思路是读取a.txt的内容,然后用tr命令将逗号替换为空格,将这几个数字作为数组num的数组元素。最后for遍历数组进行判断输出。

    [root@charramma ~]# cat a.txt 
    9,13,51,60
    [root@charramma ~]# cat a.sh
    #!/bin/bash
    
    num=($(cat a.txt | tr ',' ' '))
    
    for i in ${num[*]}; do
    	if [[ $i < 50 ]]; then
    		echo "$i 是小于50的"
    	elif [[ $i = 50 ]]; then
    		echo "$i 是等于50的"
    	else
    		echo "$i 是大于50的"
    	fi
    done
    [root@charramma ~]# sh a.sh 
    9 是大于50的
    13 是小于50的
    51 是大于50的
    60 是大于50的
    [root@charramma ~]#
    
  • 相关阅读:
    c++中stl函数的使用
    java 中String类的常见方法和StringBuffer类的使用
    c++模板类和模板函数
    c++简单工厂类的设计模式
    Android自定义的button按钮
    c++基类与派生类之间的转换
    Unity和Android结合出现Unabled to convert class into dex format
    jz2240用tftp下载程序步骤
    解决jz2440不能ping同主机问题
    android中的事件传递机制
  • 原文地址:https://www.cnblogs.com/CharrammaBlog/p/13953642.html
Copyright © 2020-2023  润新知