asdrtu 发表于 2018-8-20 13:27:31

shell之数组

  数组的定义
  何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念)。那么shell中数组是怎么定义呢,我们来看两种数据类型:一是数值类型,二是字符串类型;虽然shell本身是弱类型的,但也可以这么区分。
  数值类型的数组:一对括号表示数组,数组中元素之间使用"空格"来隔开。
  举个例子
  数值类型:
  arr_number=(1 2 3 4 5);
  字符串类型:同样,使用一对括号表示数组,其中数组中的元素使用双括号或者单引号包含,同样使用"空格"来隔开。
  arr_string=("abc" "edf" "sss"); 或者 arr_string=('abc' 'edf' 'sss');
  数组的操作
  我们使用数值类型数组arr_number=(1 2 3 4 5)做为源数组进行相关的讲解:获取数组长度,读取某个下标的值,对某个下标赋值,删除、分配、替换以及遍历。提一个知识点,我们在shell里面想获取某个变量的值,使用$符开头,如:$a或者${a}
  获取数组长度
  echo ${#arr_string
[*]}或 echo ${#arr_string[@]}就是讲中括号里面前面加个#号
  获取某个下标的值
  ${数组名[下标]}
  对某个下标进行赋值:
  这里需要提出两个问题:
  第一个问题是如果该下标元素已经存在,会怎么样?
  答:会修改下标的值为新的指定值。
  第二个问题是如果指定的下标已经超过当前数组的大小,如上述的arr_number的大小为5,指定下标为10或者11或者大于5的任意值会如何?
  答:新赋的值被追加到数组的尾部。如:
  # arr_number=9
  # echo ${arr_number
[*]}
  1 2 3 4 5 8 8 9
  删除操作
  清除某个元素:unset arr_number
  清除整个数组:unset arr_number
  分片访问
  分片访问形式为:${数组名[@或*]:开始下标:结束下标},注意,不包括结束下标元素的值。
  例如:echo ${arr_number
[*]:0:4}
  模式替换
  形式为:${数组名[*或@]/模式/新值}
  例如:echo ${arr_number
[*]/2/98}
  数组的遍历
  数组遍历我们使用for语句来演示:
  for v in ${arr_number[@]}; do
  echo $v;
  done
  结束语:数组使用的方式还比较少,之后在写脚本的过程中,希望能将数组运用好

页: [1]
查看完整版本: shell之数组