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

  • 相关阅读:
    【IOS】判断字符串为空和只为空格解决办法
    【IOS】UIActionSheet的使用
    【IOS】倒计时实现的两种方法
    android 给listview或gridview添加数据加载时的动画
    彻底颠覆你的思维,羊毛出在狗身上,猪来买单
    王石:活着的意义在哪?
    android 将图片通过base64转换为String 将图片String转换为Bitmap
    Android 之 下拉框(Spinner)的使用
    ViewPager的简单使用说明
    Android的onCreateOptionsMenu()创建菜单Menu详解
  • 原文地址:https://www.cnblogs.com/OliverQin/p/10256648.html
Copyright © 2011-2022 走看看