Shell命令之数组表示语法学习

目录
  • 引言
    • 一、实例
    • 二、读取数组
    • 三、关联数组
    • 四、获取数组中的所有元素
    • 五、获取数组的长度

引言

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

与大部分编程语言类似,数组元素的下标由 0 开始。

Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

array_name=(value1 value2 ... valuen)

一、实例

创建一个简单的数组 my_array

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]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh
第一个元素为: A
第二个元素为: B
第三个元素为: C
第四个元素为: D

三、关联数组

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

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

declare -A array_name

-A 选项就是用于声明一个关联数组。

关联数组的键是唯一的。

以下实例我们创建一个关联数组 site,并创建不同的键值:

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[@]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh
数组的元素为: 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[@]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh
$ ./test.sh
数组的元素为: www.google.com www.runoob.com www.taobao.com
数组的元素为: www.google.com www.runoob.com www.taobao.com

在数组前加一个感叹号 ! 可以获取数组的所有键,例如:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"
echo "数组的键为: ${!site[*]}"
echo "数组的键为: ${!site[@]}"

执行脚本,输出结果如下所示:

数组的键为: google runoob taobao
数组的键为: google runoob taobao

五、获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

执行脚本,输出结果如下所示:

$ chmod +x test.sh 
$ ./test.sh
数组元素个数为: 4
数组元素个数为: 4

看数组的时候,觉得遍历数组用的比较多,所以自己试着写了写遍历,同时试了一下在SHELL脚本中的变量自增几个写法,在就新手学习的时候注意一下 [ 和 $ 之间要有空格,没有空格运行会报错,新手可能不太注意这一点,我开始就没注意到~~~~

示例如下:

#!/bin/bash
my_arry=(a b "c","d" abc)
echo "-------FOR循环遍历输出数组--------"
for i in ${my_arry[@]};
do
  echo $i
done
echo "-------::::WHILE循环输出 使用 let i++ 自增:::::---------"
j=0
while [ $j -lt ${#my_arry[@]} ]
do
  echo ${my_arry[$j]}
  let j++
done
echo "--------:::WHILE循环输出 使用 let  "n++ "自增: 多了双引号,其实不用也可以:::---------"
n=0
while [ $n -lt ${#my_arry[@]} ]
do
  echo ${my_arry[$n]}
  let "n++"
done
echo "---------::::WHILE循环输出 使用 let m+=1 自增,这种写法其他编程中也常用::::----------"
m=0
while [ $m -lt ${#my_arry[@]} ]
do
  echo ${my_arry[$m]}
  let m+=1
done
echo "-------::WHILE循环输出 使用 a=$[$a+1] 自增,个人觉得这种写法比较麻烦::::----------"
a=0
while [ $a -lt ${#my_arry[@]} ]
do
 echo ${my_arry[$a]}
 a=$[$a+1]
done

Bourne shell(原生kernel下)下不支持数组,只能通过模拟来实现类似数组功能。

实例 1

#!/bin/sh
#注意不是/bin/bash
echo "##############使用eval函数###############"
echo "使用参考:"
echo "http://www.runoob.com/linux/linux-comm-eval.html"
eval a1=bili
eval a2=nico
eval a3=yama
for i in 1 2 3 ; do
  eval echo "$a$i"
done

输出结果:

##############使用eval函数###############
使用参考:
http://www.runoob.com/linux/linux-comm-eval.html
bili
nico
yama

实例 2

#!/bin/sh
#注意不是/bin/bash
echo "##########################################"
echo "指令参考:"
echo "http://www.runoob.com/linux/linux-comm-expr.html"
:<<!
根据用户输入的一句话来定义数组
并遍历数组元素
!
echo "输入字符串(以空格分开):"
read str
i=0
for word in $str; do
    i=`expr $i + 1`
    eval a$i="$word"
    eval echo "数组的第 $i 个元素为: $a$i"
done

输出结果:

##########################################
指令参考:
http://www.runoob.com/linux/linux-comm-expr.html
输入字符串(以空格分开):
runoob google taobao
数组的第 1 个元素为: runoob
数组的第 2 个元素为: google
数组的第 3 个元素为: taobao

字符串转数组:

#!/bin/bash
words="aaa bbb ccc"
#字符串转数组,空格是分隔符
array=(${words// / })
#打印数组最后一个成员
echo ${array[${#array[*]}-1]}
#打印数组长度
echo ${#array[*]}
#字符串不转换为数组,在循环实现以空格为分隔符打印每个成员
for word in ${words}; do
    echo ${word}
done

运行结果:

ccc3aaabbbccc

以上就是Shell命令之数组表示语法学习的详细内容,更多关于Shell命令语法数组表示的资料请关注我们其它相关文章!

(0)

相关推荐

  • Shell数组添加元素及注意事项

    向Shell数组添加元素有多种方法,每种方法在使用时都有一些需要注意的地方,没有见过这方面的总结资料,所以自己总结一下. 直接下标添加 array_name[index]=value 最简单的添加方式,直接用下标index为数组元素赋值,在使用时需要注意的是就是需要确保下标index处原本是没有值的,否则会替换index处原本的值. 数组长度添加 array_name[${#array_name[@]}]=value #或array_name[${#array_name[*]}]=value 以

  • shell编程入门之变量,字符串,数组,函数使用方法总结

    一. 变量 变量定义 定义变量时,变量名不加美元符号 your_name="jb51.net" 注意,变量名和等号之间不能有空格. 除了显式地直接赋值,还可以用语句给变量赋值,如, for file in `ls /etc` 或 for file in $(ls /etc) 已定义的变量,可以被重新定义,如, your_name="tom" echo $your_name your_name="alibaba" echo $your_name 注

  • Shell中数组以及其相关操作的详细实例

    Shell中数据类型不多,比如说字符串,数字类型,数组.数组是其中比较重要的一种,其重要应用场景,可以求数组长度,元素长度,遍历其元素,元素切片,替换,删除等操作,使用非常方便. Shell中的数组不像JAVA/C,只能是一维数组,没有二维数组;数组元素大小无约束,也无需先定义数组的元素个数;但其索引则像JAVA/C/Python,从0开始,下面其常用的方式进行总结. [数组声明] 备注: 1) 不像JAVA/C等强编程语言,在赋值前必须声明:SHELL只是弱编程语言,可事先声明也可不声明: 2

  • node实现shell命令管理工具及commander.js学习

    目录 背景. 一.用法演示 1: 安装 2: 添加 3: 查看 + 使用' 4: 移除 5: add有变量的命令 6: 使用变量 二.初始化自己的node项目 三.初始化命令 + 全局安装 四.commander.js (node命令行解决方案) 番外 五.inquirer.js(node命令行交互插件) 六.添加命令: add 七.移除命令: rm 八.查看+使用: ls 1: 查看ls, 支持传参 -a 2: 判断命令语句中是否有变量 3: 无变量 -> 执行 4: 有变量 -> 执行 九

  • 利用shell命令统计日志的方法详解

    前言 大家都知道,通过使用 shell 命令可以很方便地对日志进行统计和分析,当服务有异常的时候,需要去排查日志,那么掌握一种统计日志的技巧就是必不可少的了. 假设有一个包含下面内容的日志文件 access.log.我们以统计这个文件的日志为例. date=2017-09-23 13:32:50 | ip=40.80.31.153 | method=GET | url=/api/foo/bar?params=something | status=200 | time=9.703 | bytes=

  • 开发者常用及实用Linux Shell命令备忘录(小结)

    最近都需要在 Linux 系统下开发,所以经常需要在终端中进行操作.Linux 有很多 shell 命令可以帮助我们完成任务,但不常使用的话就会忘记掉. 本篇作为命令备忘录,我会将实际工作当中用到的命令记录下来,并长期保持更新. 1.which which 用于查找一个文件,并返回绝对路径,查找的目录范围由系统的 PATH 指定. 由于 Linux 中一切皆文件,所以 which 指定更多的是查找系统中有没有这个命令. 比如,查找 ls 命令,我们可知它的可执行文件的位置 which ls /b

  • MongoDB Shell 命令实例总结【进阶篇】

    本文实例讲述了MongoDB Shell 命令.分享给大家供大家参考,具体如下: 原始文件请到我的github上去下载:https://github.com/yangqingxian/mongodb 这里先讲几件事: 1.这是第三次修改这篇文章了,也是第一次正真意义上的使用 github 来控制版本,想想还是有点小激动的:) 2.其中的内容结构与 mongodb基础命令是一致的,只不过添加了很多内容进去,适用于想进一步学习mongodb数据库的人 3.我其实也是菜鸟,所以我会用很白目的语言来解释

  • 非常好的12道shell命令经典面试问题

    如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答. 了解脚本或至少知道基础知识对测试工程师来说至关重要,它也有助于你在工作环境中自动完成很多任务. 你会发现,现在多数的测试工程师招聘要求中,都需要 linux基础技能,及基本的Shell脚本技能. 如下是一些常见的Shell脚本面试问题. 1.文本分析 取出password中shell出现的次数 第一种方法结果:       4 /bin/bash       1 /bin/sync       1 /sbin/halt    

  • Linux shell命令帮助格式详解

    前言 linux shell命令通常可以通过-h或--help来打印帮助说明,或者通过man命令来查看帮助,有时候我们也会给自己的程序写简单的帮助说明,其实帮助说明格式是有规律可循的 帮助示例 下面是git reset命令的帮助说明,通过man git-reset可以查看 git reset [-q] [<tree-ish>] [--] <paths>... git reset (--patch | -p) [<tree-ish>] [--] [<paths>

  • 提高你工作效率的shell命令总结大全

    前言 大家都知道Shell是一个用C语言编写的程序,它是用户使用 Linux 的桥梁.Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive).下面这篇文章主要给大家分享了一些关于提高工作效率的shell命令,话不多说,来一起看看详细的介绍: 一.切换目录 注意:当前用户是xiaochao,系统为centos6,并且,shell命令是严格区分大小写的. 显示当前目录路径:pwd pwd output:/

  • Android执行shell命令详解

    一.方法 复制代码 代码如下: /** * 执行一个shell命令,并返回字符串值 * * @param cmd * 命令名称&参数组成的数组(例如:{"/system/bin/cat", "/proc/version"}) * @param workdirectory * 命令执行路径(例如:"system/bin/") * @return 执行结果组成的字符串 * @throws IOException */ public stati

  • linux shell命令行选项与参数用法详解

    问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景.1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理:2,getopts来处理,单个字符选项的情况(如:-n 10 -f file.txt等选项):3,getopt,可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等).总结:小脚本手工处理即可,getopt

  • linux shell命令行参数用法详解

    习惯使用linux命令行来管理linux系统,例如: 复制代码 代码如下: $ date 二 11 23 01:34:58 CST 1999  $ 用户登录时,实际进入了shell,它遵循一定的语法将输入的命令加以解释并传给系统.命令行中输入的第一个字必须是一个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或TAB隔开,格式如下:  复制代码 代码如下: $ Command Option Arguments 一,选项和参数 选项是包括一个或多个字母的代码,它前面有一个减号(减

随机推荐

其他