bash shell数组

bash shell中,对于数组的处理是一个容易出错的地方。

数组:
    变量:存储单个元素的内存空间;
    数组:存储多个元素的连续的内存空间;
        数组名
        索引:编号从0开始,属于数值索引;
        注意:索引也可支持使用自定义的格式,而不仅仅是数值格式;
        bash的数组支持稀疏格式;就是不在连续的内存空间中存放每一个数组元素

  1. 声明数组:
        declare -a ARRAY_NAME
        declare -A ARRAY_NAME: 关联数组;
  2. 数组元素的赋值:
        (1) 一次只赋值一个元素;
        ARRAY_NAME[INDEX]=VALUE
            weekdays[0]="Sunday"
            weekdays[4]="Thursday"
        (2) 一次赋值全部元素:
        ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
        (3) 只赋值特定元素:
        ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
        (4) read -a ARRAY
  3. 引用数组元素:${ARRAY_NAME[INDEX]}
    注意:省略[INDEX]表示引用下标为0的元素;

    数组的长度(数组中元素的个数):${#ARRAY_NAME[*]}, ${#ARRAY_NAME[@]}

示例:生成10个随机数保存于数组中,并找出其最大值和最小值;
 #!/bin/bash
#
declare -a rand
declare -i max=0
for i in {0..9}; do
    rand[$i]=$RANDOM
    echo ${rand[$i]}
    [ ${rand[$i]} -gt $max ] && max=${rand[$i]}
done
echo "Max: $max"
示例:定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件;要统计其下标为偶数的文件中的行数之和;
#!/bin/bash
#
declare -a files
files=(/var/log/*.log)
declare -i lines=0
for i in $(seq 0 $[${#files[*]}-1]); do
    if [ $[$i%2] -eq 0 ];then
    let lines+=$(wc -l ${files[$i]} | cut -d‘ ‘ -f1)
fi
done
echo "Lines: $lines."    
引用数组中的元素:
所有元素:${ARRAY[@]}, ${ARRAY[*]}

数组切片:${ARRAY[@]:offset:number}
    offset: 要跳过的元素个数
    number: 要取出的元素个数,取偏移量之后的所有元素:${ARRAY[@]:offset};

向数组中追加元素:
            ARRAY[${#ARRAY[*]}]

删除数组中的某元素:
            unset ARRAY[INDEX]


        关联数组:
            declare -A ARRAY_NAME
            ARRAY_NAME=([index_name1]=‘val1‘ [index_name2]=‘val2‘ ...)

练习:生成10个随机数,升序或降序排序;

时间: 09-12

bash shell数组的相关文章

bash shell数组变量

一.定义数组变量 1.语法 (1)ArrayName=(parameter1 parameter2 ...) 例1.定义一个数组名为name,值为claire,obama,george的数组 name=(claire obama george ) (2)ArrayName=( parameter1 parameter2 ... ) 同样我们将例1改成第二种方式 name=( claire obama george ) 二.函数的访问 (1)下标访问 ${ArrayName[0]}   例1中就是

bash shell基础特性之三(数组)

bash shell基础特性之三(数组) 一.数组定义 数组指连续的多个独立内存空间,每个内存空间相当于一个变量. bash shell只支持一维数组,但参数个数没有限制. 数组元素:数组名+索引(从0开始编号) 声明数组:declare -a ARRAR_NAME(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 关联数组:declare -A ARRAY_NAME 数组元素的赋值:一次赋值全部元素.指定索引进行赋值.一次只赋值一个元素 (1) array=(var1 va

bash shell环境变量

$* 将所有命令行参数当做单个文本值包含 [email protected] 将所有命令行参数当做独立的文本值包含 $# 命令行参数数目 $? 最近使用的前端进程的退出状态码 $- 当前命令选项标记 $$ 当前shell的进程ID(PID) $! 最近执行的后台进程PID $0 来自命令行的命令名称 $_ shell的绝对路径名 BASH 用来调用shell的全文件名 BASH_ARGC 当前子函数中的参数数目 BASH_ARGV 含有所有指定命令行参数的数组 BASH_COMMAND 当前正在

bash shell学习-基础 (笔记)

When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时,直挂云帆济沧海" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) 一.认识shell 1.什么是shell shell是一种“提供使用者界面”来实现用户与内核通信的软件(命令解释器) 2.为什么要学习shell ①命令行界面的shell在各大Linux发行版中都一样: ②远程管理时命令行界

Bash Shell 小试牛刀

一.终端打印 [[email protected] ~]# echo welcome to bash! welcome to bash! [[email protected] ~]$ echo 'welcome to bash!' welcome to bash! [[email protected] ~]$ echo "welcome to bash\!" welcome to bash\! (注意,双引号内不能直接用特殊符号,需要用转义符\) [[email protected]

8.11_Linux之bash shell脚本编程入门篇(一)

什么是bash shell脚本编程? 答:Linux里面有多种shell,而CentOS和redhat的默认shell是bash shell.至于shell脚本,这个跟windows操作系统里面的批处理文件有点像(.bat的文件).不知道大家还是否记得Linux的哲学思想吗?其中有那么两点点:由众多目的的单一应用程序组成:一个程序只做一件事,且做好:组合目的的单一的小程序完成复杂的任务.我觉得shell脚本编程就很好的体现了这个哲学思想.shell脚本利用shell的功能缩写的一个"程序&quo

系统管理中 bash shell 脚本常用方法总结

FROM: http://www.cnblogs.com/hunterfu/archive/2010/02/23/1672129.html 在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则. 1. 单引号和双引号的区别 单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符 ,不会作变量的引用,直接输出字符窜.请看如下例子: [[email protec

[Bash Shell] Shell学习笔记

1. Shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序.建立文件并以并行的方式协调各个程序的运行.因此,对于用户来说,s

bash shell基础编程

一. BASH Shell编程基础 1. BASH Shell的可执行文件 (1) 内部命令 (2) 外部命令 (3) 脚本文件 2. BASH Shell的命令解释过程 在path指定范围内查找(外部命令) ...... 3. BASH Shell的变量 (1) 变量的分类 -按作用域分 a. 局部变量 b. 全局变量 -按用途分 a. 自定义变量 b. 系统环境变量(path) c. 特殊变量 (2) 定义和引用变量 -定义变量: 即用即定义.不用加$ 注: 可用export命令将变量输出为