目录
数组可以同时操作一堆变量,在运维中可以简单的看成同时给多个变量赋值。
在运维里学的数组非常少,平时在别的脚本能看懂就行。
- 定义数组
- 查看 数组里的内容
- 遍历数组 把想要的数组取出来
在shell里定义数组比较常见的方法
定义方法1
Declare命令:(不光是定义数组的,可以定义变量,定义好多东西,用的特别少)
参数说明:
-a :定义为数组array
-f :定义为函数function
-i :定义为整数integer
-r :定义为只读
-x :定义为环境变量
# declare -a mm=(5 6 7 8)
# echo ${mm[2]}
显示结果为 7
declare -a mm=(5 6 7 8) -a 后边是数组的名称(随便起 跟变量一样) (5 6 7 8 )小括号里面的东西是数组元素是以空格隔开的语法是死的。有的编程语言是逗号。
下标从0开始,表示第一位,以此类推 单独的查看某一个数组元素的值 echo ${mm[2]}显示结果为 7
查看数组里所有的元素
declare -p array
echo ${array[*]}
echo ${mm[*]} (@和*一样 *表示所有)
查看数组长度
echo ${#abc[@]}
查看数组元素:按下标从0开始
# echo ${array[0]}
1
获取数组元素的索引(下标):
# echo ${!array[*]}
0 1 2 3 4 5
普通的变量
a=1234 echo ${a}
echo ${#a} 变量的长度
定义方法2
hello=(1 2 3 4 5)
echo ${hello[4]}
echo ${hello[*]}
定义出来的数组和declare一样,用法也一样包括查看方法。
ls / hello=(`ls /`) echo ${hello[*]}
定义方法3
刚刚两种方法直接把所有的数组元素的全部一次性的赋给这个数组。
之前根本没有定义过叫test的数组,但是可以直接拿一个新的数组名称加上它的下标,直接给它赋值,当赋完第一个值之后,这个数组就被创建出来了。发现这个下标并不是连续的,去查的时候下标0没有,下标为1的有。也就是说在shell里数组元素不一定是连续的,可以把某一个数组元素放空。
数组成员不必一定要连贯或连续的
数组的一部分成员允许不被初始化
数组中空缺元素是允许的
没有初始化内容的数组元素打印空值(NULL值)
两个数组元素的和被赋值给另一个数组元素 (语法比较严格)
格式化打印 printf
想让字符串展示出来是什么样子就是什么样
例如 打印hello world 打印出来想让他中间有个竖杠,hello前面后面加个A或者这个world所占的宽度为10。(这种格式可以在书写的时候就定义好)
[root@bogon ~]# echo 'AhelloA | world' 这种输出格式可以用printf完成
printf ' ' hello 中间是格式后面是值
printf 'A%sA |%10s\n' hello world (%是字符串) %s表示第一个hello第二个表示world 10表示world的宽度 默认情况下是右对齐 如果是左对齐-10 但它依然占10位的宽度
printf(专门用来打印想要展示格式的字符串 )
写100行格式化打印比较方便,因为前面传给%s的东西可以是变量
例如a=hello
printf 'A%sA |%10s\n' $a world $a可以传变量,到时候可以做批量化的格式化操作,平时一行两行还不如直接写。
遍历数组 for循环
for循环可以遍历数组