我们一起来学Shell - 初识shell


我们一起来学Shell - shell的变量


我们一起来学Shell - shell的条件判断


我们一起来学Shell - shell的循环控制


我们一起来学Shell - shell的数组


我们一起来学Shell - shell的函数


我们一起来学Shell - shell的并发及并发控制


我们一起来学Shell - 正则表达式

什么是数组

Shell 的数组就是把有限个元素(变量或字符内容)用一个名字命名,然后用编号对它们进行区分的元素集合。这个名字就称为数组名,用于区分不同内容的编号就称为数组下标。组成数组的各个元素(变量)称为数组的元素,有时也称为下标变量。

有了Shell数组后,就可以用相同名字引用一系列变量及变量值,并通过数字(索引)来识别使用它们。

在许多场合,使用数组可以缩短和简化程序开发。

数组的本质还是变量,是特殊的变量形式

数组中常用变量

${ARRAY_NAME[INDEX]}      # 引用数组中的元素 注意:引用时,只给数组名,表示引用下标为0的元素
${#ARRAY_NAME[*]} # 数组中元素的个数
${#ARRAY_NAME[@]} # 数组中元素的个数 ${ARRAY_NAME[*]} # 引用数组中的所有元素
${ARRAY_NAME[@]} # 引用数组中的所有元素
${#ARRAY_NAME} # 数组中下标为 0 的字符个数

数组的定义

通过数组名[下标]对数组进行定义和赋值,如果下标不存在,自动添加新一个数组元素,如果下标存在就覆盖原来的值

删除数组和删除变量是一样的,使用unset即可

小括号定义数组变量

  • 用小括号将变量值括起来赋值给数组变量,每个变量值之间要用空格分隔
arry=(hello world)

输出数组的变量值

echo ${arry[@]}
echo ${arry[0]}
echo ${arry[1]}

索引数组下标从数字0开始,0表示第一个变量值

小括号加键值对定义数组变量

arry=([3]=hello [4]=world)

输出数组的变量值

echo ${arry[@]}
echo ${arry[3]}
echo ${arry[4]}

指定数组下标,输出指定的变量值

分别定义数组变量

arry[0]=hello
arry[1]=world
arrys[0]=study
arrys[1]=shell

输出数组的变量值

echo ${arry[@]}
echo ${arrys[@]}

动态地定义数组变量

  • 使用命令的输出结果作为数组的内容
arry=($(ls /etc/ | head -n 5 ))

输出数组的变量值

echo ${arry[@]}

数组赋值的切片

#!/usr/bin/env bash
array=({a..z}) echo "数组的变量值为:${array[@]}"
echo "数组的变量值个数为:${#array[@]}"
echo "从第一个字符开始往后的五个字符的内容: ${array[@]:0:5}"
echo "从第六个字符开始往后的五个字符的内容: ${array[@]:5:5}"

结果如下

数组的变量值为:a b c d e f g h i j k l m n o p q r s t u v w x y z
数组的变量值个数为:26
从第一个字符开始往后的五个字符的内容: a b c d e
从第六个字符开始往后的五个字符的内容: f g h i j

数组的赋值删除、替换,与变量的赋值删除、替换的方式也是一样的,只是数组的变量值的书写方式不同,区别在于[@],这是数组输出所有变量值的方式

关于变量的赋值删除、替换,可以看我的另一篇博客()[01-我们一起来学Shell - shell的变量]

遍历数组

#!/usr/bin/env bash
array=(hello world welcome to study shell) for (( i=0; i<${#array[@]}; i++ ))
do
echo "for循环遍历数组方式一: ${array[i]}"
done
echo " " for var in ${array[@]}
do
echo "for循环遍历数组方式二: ${var}"
done
echo " " i=2
while [[ $i < ${#array[@]} ]]
do
echo "while循环遍历数组: ${array[i]}"
let i++
done

结果如下

for循环遍历数组方式一: hello
for循环遍历数组方式一: world
for循环遍历数组方式一: welcome
for循环遍历数组方式一: to
for循环遍历数组方式一: study
for循环遍历数组方式一: shell for循环遍历数组方式二: hello
for循环遍历数组方式二: world
for循环遍历数组方式二: welcome
for循环遍历数组方式二: to
for循环遍历数组方式二: study
for循环遍历数组方式二: shell while循环遍历数组: welcome
while循环遍历数组: to
while循环遍历数组: study
while循环遍历数组: shell

while是当变量(数组下标)小于数组长度时进入循环体,所以,没有输出hello和world

关联数组

Bash 支持关联数组,它可以使用字符串作为数组索引,关联数组一定要事先声明才行,不然会按照索引数组进行执行

使用 declare -A 来定义一个关联数组

使用${!arry[@]}来获取数组的索引列表

#!/usr/bin/env bash
declare -A city_arry=([zhangsan]=ShangHai [lisi]=BeiJing [wangwu]=GuangZhou) for CITY in ${!city_arry[@]}
do
echo "${CITY} come from ${city_arry[${CITY}]}"
done

通过${!city_arry[@]}将索引输出给${CITY},再通过${city_arry[${CITY}]},循环输出变量值

结果如下

zhangsan come from ShangHai
lisi come from BeiJing
wangwu come from GuangZhou

我们一起来学Shell - shell的数组的更多相关文章

  1. linux shell 中的数组的取值 遍历 替换 删除操作

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  2. 我们一起来学Shell - shell的并发及并发控制

    文章目录 bash的并发 未使用并发的脚本 简单修改 使用wait命令 控制并发进程的数量 文件描述符 查看当前进程打开的文件 自定义当前进程用描述符号操作文件 管道 我们一起来学Shell - 初识 ...

  3. 我们一起来学Shell - shell的函数

    文章目录 定义函数 执行不带参数的函数 执行带参数的函数 函数的执行总结 我们一起来学Shell - 初识shell 我们一起来学Shell - shell的变量 我们一起来学Shell - shel ...

  4. 我们一起来学Shell - shell的循环控制

    文章目录 Shell 循环之 for 语句 Shell 循环之 while 语句 Shell 循环之 until 语句 Shell 循环控制 break指令 continue 指令 exit 指令 s ...

  5. 我们一起来学Shell - shell的条件判断

    文章目录 Shell 条件测试语法 符号说明 Shell 测试表达式 文件测试表达式 字符串测试表达式 整数操作符 逻辑操作符 测试表达式的区别总结 Shell 条件判断之if语句 单分支 IF 条件 ...

  6. shell二位数组——终端字符下降动画

    猜想:Shell支持关联数组,可以利用关联数组模拟二维数组. [验证猜想] #!/bin/bash array[1,1]=1 array[2,1]=2 array[3,1]=3 for i in `s ...

  7. Shell中的数组及其相关操作

    http://blog.csdn.net/jerry_1126/article/details/52027539 Shell中数据类型不多,比如说字符串,数字类型,数组.数组是其中比较重要的一种,其重 ...

  8. (转)轻松掌握shell编程中数组的常见用法及示例

    缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...

  9. shell中的函数、shell中的数组、告警系统需求分析

    7月16日任务 20.16/20.17 shell中的函数20.18 shell中的数组20.19 告警系统需求分析 20.16/20.17 shell中的函数 函数就是一个子shell就是一个代码段 ...

随机推荐

  1. Pandas系列(十八)- 多级索引

    多级索引 多级索引(也称层次化索引)是pandas的重要功能,可以在Series.DataFrame对象上拥有2个以及2个以上的索引.实质上,单级索引对应Index对象,多级索引对应MultiInde ...

  2. 使用 Jenkins + Ansible 实现 Spring Boot 自动化部署101

    本文要点:设计一条 Spring Boot 最基本的流水线:包括构建.制品上传.部署.使用 Docker 容器运行构建逻辑.自动化整个实验环境:包括 Jenkins 的配置,Jenkins agent ...

  3. 【Java】包装类

    文章目录 包装类 什么是包装类 基本数据类型-->包装类 包装类-->基本数据类型 自动装箱与自动拆箱 基本数据类型.包装类与String的转换 基础数据类型.包装类-->Strin ...

  4. day7 对字母数字的编排

    1.函数fun()的功能:在s数组内寻找并且统计t数组在s数组中出现的次数 输入字符串:函数scanf()函数不好用,会出现很多bug,因此不使用scanf() 效果理想: 2.函数fun()功能:将 ...

  5. Java打印空心三角

    Java打印空心三角 public static void main(String[] args) { int n=5; //n表示输出空心三角形行数,这里以5行为例 for(int i=1;i< ...

  6. C# 季节判断

    编写一个控制台应用程序,可根据输入的月份判断所在季节. 代码如下 using System; using System.Collections.Generic; using System.Linq; ...

  7. 【程序5】输入三个整数x,y,z,请把这三个数由小到大输出

    我自己写的: x = int(input('x:')) y = int(input('y:')) z = int(input('z:')) L = [x,y,z] print(sorted(L)) 官 ...

  8. vue和react 相似和区别

    相似之处 他们都是JavaScript的UI框架,专注于创造前端的富应用 不同于早期的JavaScript框架"功能齐全",Reat与Vue只有框架的骨架,其他的功能如路由.状态管 ...

  9. 学习JAVAWEB第四天

    # 今日内容 1. JDBC基本概念 2. 快速入门 3. 对JDBC中各个接口和类详解 ## JDBC: 1. 概念:Java DataBase Connectivity Java 数据库连接, J ...

  10. static关键字的一些使用

    百度百科定义static关键字 通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例.在成员的声明前面加上关键字static(静态的)就能创建 ...