zoukankan      html  css  js  c++  java
  • 【Linux】shell数组

    1.数组的概念

        shell数组就是一个元素集合,它把有限个元素用一个名字来命名,然后用编号对他们分区。这个名字称为数组名,用于区分不同内容的编号称为数组的下标。

        数组的设计其实就是为了处理方便,把具有相同类型的若干变量按有序的形势组织起来的一种形势,以减少重复频繁的单独定义。

    2.数组的定义

    # 语法:
    array=(value value1 value3 ...)
    # 实例:
    array=(1 2 3)

    或者

    # 语法:
    array=([key1]=value1 [key2]=value2 ...)
    # 实例:
    array=([3]='A' [9]='B' [6]='C')

    再或者

    arr1[0]=value
    arr1[1]=value1
    arr1[2]=value2

    还可以使用动态命令定义数组

    arr2=($(ls /))

    3.数组的读取

    注意:数组的元素下标是从0开始的

    echo ${QINYS[0]} 引用第一个数组变量,结果打印test1;

    echo ${QINYS[1]} 引用第二个数组变量;

    echo ${QINYS[@]} 显示该数组所有参数;

    echo ${#QINYS[@]} 显示该数组参数个数,也可以使用echo ${#QINYS[*]} ;

    echo ${#QINYS[0]} 显示test1字符长度;

    echo ${QINYS[@]:0} 打印数组所有的值;

    echo ${QINYS[@]:1} 打印从第二个值开始的所有值;

    echo ${QINYS[@]:0:2} 打印从第一个值与第二个值;

    echo ${QINYS[@]:1:2} 打印从第二个值与第三个值。

    4.数组的增删

    4.1 增加或覆盖

    “数组名[下标]”对数组进行引用赋值,如果存在,则覆盖,不存在则新增

    例如:arr3[4]=5 表示数组arr3中没有第4个元素,则新增,有则覆盖元素

    4.2 删除

    使用命令unset删除

    示例:unset arr3[0]

    删除整个数组

    示例:unset arr3


    3、shell数组脚本案例

    3.1.循环打印数组元素

    #!/bin/bash
    array=(1 2 3)
    for((i=0;i<${#array[@]};i++))
    do
    	echo ${array[i]}
    done
    

    输出结果:

    image

    2.通过普通for循环语句打印数组元素

    #!/bin/bash
    array=(1 2 3)
    for i in ${array[@]}
    do
    	echo $i
    done
    

    输出结果:

    image


    3.通过while循环打印数组

    #!/bin/bash
    array=(1 2 3)
    i=0
    while((i<${#array[@]}))
    do
    	echo ${array[i]}
    	((i++))
    done
    

    输出结果与上述相同


    4.竖向定义数组并批量打印

    #!/bin/bash
    arr_ip=(
    192.168.1.1
    192.168.1.2
    192.168.1.3
    192.168.1.4
    192.168.1.5)
    
    #循环打印数组
    for((i=0;i<${#arr_ip[@]};i++))
    do
    	echo "The num is $i,the ip is ${arr_ip[i]}"
    done
    echo "---------------------"
    echo "ayy_ip length is :${#arr_ip[@]}"
    

    输出结果:

    image


    4、现实案例

    需求:利用bash打印出下面这句话中大于等于5个字母的单词

    my favourite subject is English . and i like sports very much

    方法一:

    #!/bin/bash
    arr=(my favourite subject is English . and i like sports very much)
    for((i=0;i<${#arr[@]};i++))
    do
    	if [ ${#arr[i]} -gt 5 ]
    	  then
    		echo "${arr[i]}"
    	fi
    done
    echo '----------------------'
    for word in ${arr[*]}
    do
    	if [ `expr length $word` -gt 5 ];
    	  then
    		echo $word
    	fi
    done
    

    输出结果:

    image

    方法2:使用awk打印

    Linux:/qinys/data # chr="my favourite subject is English . and i like sports very much"
    Linux:/qinys/data # echo  $chr|awk '{for(i=0;i<=NF;i++) if(length($i)>5) print $i}'
    my favourite subject is English . and i like sports very much
    favourite
    subject
    English
    sports

  • 相关阅读:
    修复PLSQL Developer 与 Office 2010的集成导出Excel 功能
    Using svn in CLI with Batch
    mysql 备份数据库 mysqldump
    Red Hat 5.8 CentOS 6.5 共用 输入法
    HP 4411s Install Red Hat Enterprise Linux 5.8) Wireless Driver
    变更RHEL(Red Hat Enterprise Linux 5.8)更新源使之自动更新
    RedHat 5.6 问题简记
    Weblogic 9.2和10.3 改密码 一站完成
    ExtJS Tab里放Grid高度自适应问题,官方Perfect方案。
    文件和目录之utime函数
  • 原文地址:https://www.cnblogs.com/OliverQin/p/10256648.html
Copyright © 2011-2022 走看看