Shell脚本编写教程【二】——Shell 数组

2023-11-17

Shell脚本编写教程【二】——Shell 数组


目录https://blog.csdn.net/shn111/article/details/131590488

参考教程https://www.runoob.com/linux/linux-shell.html

在线编辑器https://www.runoob.com/try/runcode.php?filename=helloworld&type=bash


bash支持一维数组(不支持多维数组),并且没有限定数组的大小
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。


创建数组

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 value2 … valuen)

my_array=(A B "C" D)

也可以使用数字下标来定义数组

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

读取数组

读取数组元素值的一般格式是:
${array_name[index]}

my_array=(A B "C" D)

echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"

关联数组(字典)

关联数组可以使用任意的字符串或者整数作为下标来访问数组元素

关联数组使用declare命令来声明,语法格式如下:
declare -A array_name

-A:用于声明一个关联数组

关联数组的键是唯一的

实例:

declare -A site=(["google"]="www.google.com" ["runoob"]="www.runoob.com" ["taobao"]="www.taobao.com")

也可以先声明一个关联数组(自己试的不声明也可以(发现不声明的话还是有问题,在后面取数组所有元素时,如果没有声明那么只会取到最后一个元素)),再设置键和值:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

访问关联数组元素时使用指定的键,格式如下:
array_name["index"]

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo ${site["runoob"]}
# www.runoob.com

获取数组中的所有元素

使用@*可以获取数组中的所有元素

实例:

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"
# 数组的元素为: A B C D
# 数组的元素为: A B C D

关联数组:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo "数组的元素为: ${site[*]}"
echo "数组的元素为: ${site[@]}"
# 数组的元素为: www.google.com www.taobao.com www.runoob.com
# 数组的元素为: www.google.com www.taobao.com www.runoob.com

在数组前面加一个感叹号!可以获取数组的所有键

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

echo "数组的键为: ${!site[*]}"
echo "数组的键为: ${!site[@]}"
# 数组的键为: google taobao runoob
# 数组的键为: google taobao runoob

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,在数组名前加#获取

#my_array[*]:获取数组元素个数
#my_array[@]:获取数组元素个数
#my_array[i]:获取数组中第i个元素的长度

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D

echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"
echo "数组第0个元素的长度为: ${#my_array[0]}"

# 数组元素个数为: 4
# 数组元素个数为: 4
# 数组第0个元素的长度为: 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell脚本编写教程【二】——Shell 数组 的相关文章

  • 迭代 bash 脚本中的变量名称

    我需要在一堆文件上运行一个脚本 这些文件的路径被分配给train1 train2 train20 我想 为什么不使用 bash 脚本使其自动执行呢 所以我做了类似的事情 train1 path to first file train2 pa
  • 匹配模式后添加行[重复]

    这个问题在这里已经有答案了 我有一个文件说test具有以下值 Linux Solaris Fedora Ubuntu AIX HPUX 如何在匹配 AIX 的行后面添加一行系统主机名 如果我做 echo hostname gt gt tes
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • os.Mkdir 和 os.MkdirAll 权限

    我正在尝试在程序开始时创建一个日志文件 我需要检查是否 log如果不创建目录 则目录存在 然后继续创建日志文件 好吧 我尝试使用os Mkdir 也os MkdirAll 但无论我在第二个参数中输入什么值 我都会得到一个没有权限的锁定文件夹
  • 获取变量的名称作为输入并使用该名称更改变量

    我从脚本用户那里获取变量的名称作为第一个参数 并将该变量的值回显到控制台 bin bash variablename 1 echo The value of variablename is variablename 这太棒了 我无法开始工作
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • 如何从 bash 数组中删除元素而不展平数组

    我想创建一个采用 bash 数组的函数 如下所示 a element zero element one element two 并删除一个元素 如 元素一 并留下一个数组 如下所示 a element zero element two 这样
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • Linux 中什么处理 ping?

    我想覆盖 更改 linux 处理 ping icmp echo 请求数据包的方式 这意味着我想运行自己的服务器来回复传入的 icmp 回显请求或其他 数据包 但为了使其正常工作 我想我需要禁用 Linux 的默认 ping icmp 数据包
  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • bash中的用户名、密码程序

    我有一个程序 要求用户输入用户名和密码 然后将其存储在文本文件中 第一列是用户名 第二列是密码 我需要一个命令 在用户输入用户名和新密码时替换密码 如下我拥有的 bin bash admin menu Register User echo

随机推荐

  • Hypervisor介绍及在智能驾驶的应用

    转自Hypervisor 智能座舱和智能驾驶融合的关键技术 腾讯新闻
  • 2023年计算机专业毕业设计选题有哪些?(附源码)

    计算机毕业设计这个选题的话其实有很多的 就看你自己能接受怎么样的 比如可以做网站类 系统类 小程序类 安卓app 大数据类等等 这个也要看你个人能力和技术问题 如果技术小白或者有一点点基础的话建议选择网站类和系统类的 如果有扎实的基础技能可
  • 【编程笔试】美团2021校招笔试-通用编程题第10场(附思路及C++代码)

    导览 练习地址 淘汰分数 正则序列 公司食堂 最优二叉树II 练习地址 点此前往练习 淘汰分数 某比赛已经进入了淘汰赛阶段 已知共有n名选手参与了此阶段比赛 他们的得分分别是a 1 a 2 a n 小美作为比赛的裁判希望设定一个分数线m 使
  • 过压保护芯片,高输入电压(OVP)

    PW2606是一种前端过电压和过电流保护装置 它实现了广泛的输入电压范围从2 5V到40V 过电压阈值可在外部编程或设置为内部默认设置 集成功率路径nFET开关的超低电阻确保了更好的性能电池充电系统应用的性能 它可以提供高达2A的电流 以满
  • python random.randint(0、2)_如何使用python random模块中的randint()函数?

    python中的random模块用于生成随机数 而要生成随机整数则需要用到 random模块里的randint 函数 randint 函数随机产生括号里两个参数之间的整数 且包括这两个参数 划定随机生成整数的范围 最小最大值 1 rando
  • ESP8266使用AT指令连接MQTT服务器

    注 不同的AT固件在使用时存在差异 此处使用的是安信可官方提供的MQTT透传AT固件 固件号 1471 本文为学习记录 仅作参考 如有不对之处 请留言 附 固件地址 AT固件汇总 安信可科技 ai thinker com https doc
  • JSON.parse()方法

    一 JSON的解析方法有两种 eval 和JSON parse var jsonstr str1 Hello str2 world var evalJson eval jsonstr var jsonParseJson JSON parse
  • python获取矩阵某一列元素

    今天写线性回归问题的时候遇到了一个问题 对于一个二维矩阵 python如何遍历其某一列元素 遍历一行是很简单的 直接使用索引即可 但是遍历一列呢 方法一 直接遍历法 使用一个循环 对每一行单独找出这列上的对应元素 方法二 列表解析法 这个方
  • webpack 常用配置

    环境搭建 既然是前端项目 那么就npm就必不可少 运行 npm install webpack cli g 来全局安装脚手架 随后使用 npm install webpack cli D 安装到工程下 在工程目录下创建 webpack co
  • stm32专题二十六:输入捕获 脉宽测量

    硬件设计 脉宽测量原理 当按键没有按下时 由硬件电路自动拉低 如果按键按下 则PA0产生上升沿 我们进行脉宽测量时 首先设置为上升沿捕获 然后在第一次捕获到上升沿时 将计数器清零 并设置捕获极性为下降沿捕获 当第二次捕获到信号时 就是一个完
  • Vigenere密码

    Vigenere密码技术 在单字符单表替换密码中 明文中的字符与密文中字符是一一对应的 在明文表中的字符也存在于在密文表中 明文中字符的统计特性在密文中没有得到改变 单字符多表替换密码技术是用一系列 两个以上 替换表依次对明文的字符进行替换
  • 跟据后台数据生成饼图及柱形图实例

    在做社团管理系统时 为了进一步完善功能 用jfreechar做了一个饼图与柱形图 做的比较粗糙 效果如下 现在跟大家分享一下实现方法 生成饼图 param list 传入参数为一个list list中包含多个map 这个list是从数据库中
  • ZooKeeper系统模型之集群间消息通信。

    ZooKeeper的消息类型大体上可以分为四类 分别是 数据同步型 服务器初始化型 请求处理型和会话管理型 数据同步型 数据同步型消息是指在Learner和Leader服务器进行数据同步的时候 网络通信所用到的消息 通常有DIFF TRUN
  • java 仓库管理_Java仓库管理系统(一)

    从小到大没有写日记的习惯 但本着互联网开放 共享的原则 并且马士兵老师曾说 当你学会一些技能的时候 看到别人正被你会的东西所困扰 你应该去帮助他 所以把仓库管理系统的详解记录一下 说的可能不那么专业 但基本都能听懂 本人编程起步 有错误请指
  • 常见手机快充协议介绍

    早在几年前 各厂家就在逐步推进手机的充电速度 随着QC PD等一系列的充电协议不断更新 各家手机厂家都有自己的快充解决方案 不仅功率不一样 手机间的充电协议与标准也变得越发复杂 不同品牌的手机快充名称也各有不同 所以我们需要先清楚我们的手机
  • 垃圾箱清空后数据恢复(亲测有效)

    辛辛苦苦写PPT写了两周 误删了还没发现 然后顺便把垃圾箱也清空了 wps还因为云空间已满不能同步上传 连个记录都没有 真的是差点气到心梗 经历了一个小时的百度 恢复了我的PPT 记录一下数据的恢复过程 无图 恢复的时候过于烦躁 忘记截图
  • STM32单片机IAP介绍

    1 什么是IAP 首先区分下两个概念 ISP和IAP ISP In System Programming 在系统中编程 通过芯片专用的串行编程接口对其内部的程序存储器进行擦写 IAP In Application Programming 在
  • Unity中UGUI的Text实现超链接点击的解决方案

    Unity实现超链接点击 功能简介 C 脚本 使用方法 Demo工程内截图 Demo地址 功能简介 1 同一个Text内可以实现多个不同字符区域的点击 2 适配了中文 英文 韩文 日文 阿拉伯语等 更多语种待测试 C 脚本 文件名 UITe
  • uni-app 微信小程序vendor.js 过大的处理方式和分包优化

    小程序工具提示vendor js过大 已经跳过es6向es5转换 这个转换问题本身不用理会 因为vendor js已经是es5的了 关于体积控制 参考如下 使用运行时代码压缩 HBuilderX创建的项目勾选运行 gt 运行到小程序模拟器
  • Shell脚本编写教程【二】——Shell 数组

    Shell脚本编写教程 二 Shell 数组 目录 https blog csdn net shn111 article details 131590488 参考教程 https www runoob com linux linux she