问题起源:脚本中定义多个监控模块,代码重复率高,仅仅模块名不同,所以思考如何精简代码?
1、如何定义数组及访问数组:
var=(1 2 3 4 5)
var=(a b c d e)
var=('1' '2' '3' '4' '5')
查看变量:
${var} 或者 $var 默认取第一个
查看全部值:
${var[*]} ${var[@]}
结论:
Shell 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用"空格"符号分割开,通用格式var=(value1 ... valuen)
读取数组元素值的一般格式是:${var[index]}
2、实践案例:
二、如何循环遍历数组呢:
#!/bin/bash
# declare an array called array and define 3 vales
array=( one two three )
for i in "${array[@]}"
do
echo "$i"
done
注意使用双引号,而不是单引号
如果上述中用的单引号就会报错。为什么呢?
三、单引号与双引号的区别:
1、单引号定义字符串所见即所得,即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。单引号是全引用,被单引号括起的内容不管是常量还是变量都不会发生替换。
2、双引号引用的内容,所见非所得。如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容。双引号是部分引用,被双引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容。
3、不使用引号定义字符串时,字符串不能包含空白字符(如Space或Tab),需要该加引号,一般连续的字符串,数字,路径等可以不加引号。如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容。
str1="test String"
str2='test String'
str3=test String
echo $str1
echo $str2
echo $str3
test String
test String