Shell编程 您所在的位置:网站首页 shell编程字符串拼接 Shell编程

Shell编程

2024-06-08 07:48| 来源: 网络整理| 查看: 265

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。

前言

(1)和其他编程语言一样,Shell 也支持数组,但仅支持一维数组而不支持多维数组,并且没有限定数组的大小。

(2)类似与C语言,数组元素的下标由0开始编号。

(3)获取数组中的元素要利用下标[ ],下标可以是整数或算术表达式,其值大于或等于0。 

一、数组的定义

(1)在Shell中用括号来表示数组,数组元素用“空格”符号分割开:

 array_name=(value1 ... valuen)

(2)Shell 是弱类型的,它并不要求所有数组元素的类型必须相同。下面例子中第三个元素就是一个“异类”,前面两个元素都是整数,而第三个元素是字符串。

arr=(20 56 "http://c.biancheng.net/shell/")

(3)Shell 数组的长度不是固定的,定义之后还可以增加元素。例如,对于上面的arr数组,它的长度是 3,使用下面的代码会在最后增加一个元素,使其长度扩展到 4:

arr[3]="abcdedfg"

(4)此外可以只给特定元素赋值,无需逐个元素地给数组赋值。如下所示,以下代码就只给第 3、5、10 个元素赋值,所以数组长度是 3。

ages=([3]=24 [5]=19 [10]=12)

二、获取某个数组元素

(1)读取数组元素值的一般格式如下,其中array_name 是数组名,index 是下标。

${array_name[index]} xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/sh NAME[0]="Zara" NAME[1]="Qadir" NAME[2]="Mahnaz" NAME[3]="Ayan" NAME[4]="Daisy" echo "First Index: ${NAME[0]}" echo "Second Index: ${NAME[1]}" xjh@ubuntu:~/iot/tmp$ ./test.sh First Index: Zara Second Index: Qadir xjh@ubuntu:~/iot/tmp$

(2)使用@ 或 * 可以获取数组中的所有元素。

${array_name[*]} ${array_name[@]} xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/sh NAME[0]="Zara" NAME[1]="Qadir" NAME[2]="Mahnaz" NAME[3]="Ayan" NAME[4]="Daisy" echo "First Method: ${NAME[*]}" NAME[10]="XJH" echo "Second Method: ${NAME[@]}" xjh@ubuntu:~/iot/tmp$ ./test.sh First Method: Zara Qadir Mahnaz Ayan Daisy Second Method: Zara Qadir Mahnaz Ayan Daisy XJH xjh@ubuntu:~/iot/tmp$

三、获取数组的长度

(1)所谓数组长度,就是数组元素的个数。

(2)获取数组长度的方法与获取字符串长度的方法相同,即首先利用@或*将数组扩展成列表,然后使用#来获取数组元素的个数,格式如下:

# 取得数组元素的个数 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得数组单个元素的长度 lengthn=${#array_name[n]}

(3)实例演示

xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/bash nums=(29 100 13) echo ${#nums[*]} #向数组中添加元素 nums[10]="http://c.biancheng.net/shell/" #一共有29个字符 echo ${#nums[@]} echo ${#nums[10]} #删除数组元素 unset nums[1] echo ${#nums[*]} xjh@ubuntu:~/iot/tmp$ ./test.sh 3 4 29 3 xjh@ubuntu:~/iot/tmp$

四、数组的拼接

(1)所谓 Shell 数组拼接(数组合并),就是将两个数组连接成一个数组。

(2)拼接数组的思路是:先利用@或*,将数组扩展成列表,然后再合并到一起。具体格式如下:

array_new=(${array1[@]} ${array2[@]}) array_new=(${array1[*]} ${array2[*]}

(3)实例演示

xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/bash array1=(23 56) array2=(99 "http://c.biancheng.net/shell/") array_new=(${array1[@]} ${array2[*]}) echo ${array_new[@]} #也可以写作 ${array_new[*]} xjh@ubuntu:~/iot/tmp$ ./test.sh 23 56 99 http://c.biancheng.net/shell/ xjh@ubuntu:~/iot/tmp$

五、删除数组元素

(1)在 Shell 中,使用 unset 关键字来删除数组元素或者删除整个数组。如下所示,array_name 表示数组名,index 表示数组下标。

unset array_name[index] #删除数组中某个元素 unset array_name #删除整个数组

(2)实例演示

xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/bash arr=(23 56 99 "http://c.biancheng.net/shell/") unset arr[1] echo ${arr[@]} unset arr echo ${arr[*]} xjh@ubuntu:~/iot/tmp$ ./test.sh 23 99 http://c.biancheng.net/shell/ #注意到这里有一个空行,是因为删除了整个数组,所以输出为空 xjh@ubuntu:~/iot/tm

六、关联数组

(1)现在最新的 Bash Shell 已经支持关联数组了。关联数组使用字符串作为下标,而不是整数,这样可以做到见名知意。

(2)关联数组也称为“键值对(key-value)”数组,键(key)也即字符串形式的数组下标,值(value)也即元素值。

(3)例如,我们可以创建一个叫做 color 的关联数组,并用颜色名字作为下标。注意,关联数组必须使用带有-A选项的 declare 命令创建。

declare -A color color["red"]="#ff0000" color["green"]="#00ff00" color["blue"]="#0000ff" #或者在定义的同时赋值 declare -A color=(["red"]="#ff0000", ["green"]="#00ff00", ["blue"]="#0000ff") 1、访问关联数组元素

访问关联数组元素的方式几乎与普通数组相同,具体形式为:

array_name["index"] color["white"]="#ffffff" color["black"]="#000000"

加上$()即可获取数组元素的值:

$(array_name["index"]) echo $(color["white"]) white=$(color["black"]) 2、获取所有元素的下标和值

使用下面的形式可以获得关联数组的所有元素值:

${array_name[@]} ${array_name[*]}

使用下面的形式可以获取关联数组的所有下标值:

${!array_name[@]} ${!array_name[*]} 3、获取关联数组长度 ${#array_name[*]} ${#array_name[@]} 4、实例演示 xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/bash declare -A color color["red"]="#ff0000" color["green"]="#00ff00" color["blue"]="#0000ff" color["white"]="#ffffff" color["black"]="#000000" #获取所有元素值 for value in ${color[*]} do echo $value done echo "****************" #获取所有元素下标(键) for key in ${!color[*]} do echo $key done echo "****************" #列出所有键值对 for key in ${!color[@]} do echo "${key} -> ${color[$key]}" done xjh@ubuntu:~/iot/tmp$ ./test.sh #ff0000 #0000ff #ffffff #000000 #00ff00 **************** red blue white black green **************** red -> #ff0000 blue -> #0000ff white -> #ffffff black -> #000000 green -> #00ff00 xjh@ubuntu:~/iot/tmp$



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有