您的位置:首页 > 运维架构 > Shell

shell学习二十九--数组

2017-12-05 23:12 211 查看
shell数组

数组:简单的说就是相同数据类型的元素按一定顺序排列的组合。

数组是把有限的类型相同的变量用一个名字命名,然后用用编号区分他们的变量的集合。

这个名字成为数组名,编号成为数组下标。

何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合

(不包括有一些编程语言提出来的关联数组的概念)。那么shell中数组是怎么定义的呢,

我们来看两种数据类型:一是数值类型,二是字符串类型;虽然shell本身是弱类型的,

但也可以这么区分。

一堆元素的集合。

数值类型的数组:一对括号表示数组,数组中元素之间使用“空格”来隔开。

举个列子: 

arr_number=(1 2 3 4 5);

字符串类型数组:同样,使用一对括号表示数组,其中数组中的元素使用双引号或者单引号包含,同样使用“空格”来隔开。

arr_string=("abc" "edf" "sss"); 或者 arr_string=('abc' 'edf' 'sss');

数组的定义与增删改查

方法1:array=(value1 value2 value3...)

数组定义

[root@node01 ~]# array=(1 2 3)

获取数组的长度

[root@node01 ~]# echo ${#array[@]}

3

[root@node01 ~]# echo ${#array[*]}

3

数组打印

[root@node01 ~]# echo ${array[0]} 

1

[root@node01 ~]# echo ${array[1]}

2

[root@node01 ~]# echo ${array[2]}

3

[root@node01 ~]# echo ${array[4]}

[root@node01 ~]#

[root@node01 ~]# echo ${array[@]}

1 2 3

数组赋值

[root@node01 ~]# array[3]=4       往数组添加值

[root@node01 ~]# echo ${array[@]}

1 2 3 4

[root@node01 ~]# echo ${array[3]}

4

[root@node01 ~]# array[1]=wolf

[root@node01 ~]# echo ${array[@]}

1 wolf 3 4

[root@node01 ~]# array=(1 2 3)

[root@node01 ~]# unset array[0]

[root@node01 ~]# echo ${array[@]}

2 3

[root@node01 ~]# 

数组删除

[root@node01 ~]# unset array

[root@node01 ~]# echo ${array[@]}

[root@node01 ~]# 

截取

[root@node01 ~]# echo ${#array[@]}

2

[root@node01 ~]# array=(1 2 3 4 5)

[root@node01 ~]# echo ${array[@]:2:3}   第二个开始截取,取3个

3 4 5

[root@node01 ~]# echo ${array[@]:2}  

3 4 5

[root@node01 ~]# echo ${array[@]:2}

3 4 5

[root@node01 ~]# echo ${array[@]:1}

2 3 4 5

[root@node01 ~]# echo ${array[@]:0}

1 2 3 4 5

替换(变量子串等操作)

[root@node01 ~]# echo ${array[@]/3/4}

1 2 4 4 5

调用语法是:${@或者*/查找字符/替换字符}该操作不会改变原先数组内容,如果需要修改,可以看上面的例子,重新定义数组。

[root@node01 ~]# array=(1 2 3 4 5)

[root@node01 ~]# array1=(${array[@]/2/4})  2替换为4

[root@node01 ~]# echo ${array1[@]}

1 4 3 4 5

应用

array=($(ls))

[root@node01 ~]# echo ${#array[@]}

21

[root@node01 ~]# echo ${array[1]} 

apache-maven-3.3.9-bin.tar.gz

[root@node01 ~]# echo ${array[@]}

anaconda-ks.cfg apache-maven-3.3.9-bin.tar.gz bind-9.10.6 bind-9.10.6.tar.gz Desktop Documents 

Downloads etc_2017-07-29.tar.gz file grep.log install.log install.log.syslog jenkins.war Music Pictures 

Public Templates tmp_2017-07-29.tar.gz Videos whoami-strace.txt wolf

[root@node01 ~]# for ((i=0; i<${#array[@]};i++));do echo ${array[$i]};done

anaconda-ks.cfg

apache-maven-3.3.9-bin.tar.gz

bind-9.10.6

bind-9.10.6.tar.gz

Desktop

Documents

Downloads

etc_2017-07-29.tar.gz

file

grep.log

install.log

install.log.syslog

jenkins.war

Music

Pictures

Public

Templates

tmp_2017-07-29.tar.gz

Videos

whoami-strace.txt

wolf

[root@node01 ~]# for i in ${array[@]};do echo $i;done   

anaconda-ks.cfg

apache-maven-3.3.9-bin.tar.gz

bind-9.10.6

bind-9.10.6.tar.gz

Desktop

Documents

Downloads

etc_2017-07-29.tar.gz

file

grep.log

install.log

install.log.syslog

jenkins.war

Music

Pictures

Public

Templates

tmp_2017-07-29.tar.gz

Videos

whoami-strace.txt

wolf

[root@node01 day13]# vi sz.sh 

#!/bin/sh

array=(laolang wolf zhangs)

for ((i=0; i<${#array[*]}; i++))

do

  echo "this is $i,then content is ${array[$i]}"

done

[root@node01 day13]# sh sz.sh 

this is 0,then content is laolang

this is 1,then content is wolf

this is 2,then content is zhangs

[root@node01 day13]# vi sz.sh 

#!/bin/sh

array=(laolang wolf zhangs)

for ((i=0; i<${#array[*]}; i++))

do

  echo "this is $i,then content is ${array[$i]}"

done

for i in ${array[@]}

do

  echo "$i"

done

[root@node01 day13]# sh sz.sh 

this is 0,then content is laolang

this is 1,then content is wolf

this is 2,then content is zhangs

laolang

wolf

zhangs

数组小结:

定义

array=(1 2 3)

array=($(ls))

打印

${array[@]}所有元素

${#array[@]}所有元素

${array[i]} 单个元素,i是下标

取数组的部分

检查网站url地址

[root@node01 day13]# cat array01.sh 

#!/bin/bash

[ -f /etc/init.d/functions ] && source /etc/init.d/functions

#define array url list

array=(
http://www.etiantian.org http://www.taobao.com http://oldboy.blog.51cto.com http://www.baidu.com
)

#check_url

wait(){

echo -n "wait 3s"

for((i=0;i<3;i++))

do

  echo -n "."

  sleep 1

done

echo 

}

check_url(){

  wget -T 5 -t 2 --spider $1 &>/dev/null

  RETVAL=$?

  if [ $RETVAL -eq 0 ];then

      action "check $1"  /bin/true

  else

      action "check $1"  /bin/false   

  fi

  return $RETVAL

}

main(){

  wait

  for((i=0;i<${#array[@]};i++))

  do

    check_url ${array[i]}

  done

}

main

[root@node01 day13]# sh array01.sh 

wait 3s...

check http://www.etiantian.org                             [  OK  ]

check http://www.taobao.com                                [FAILED]

check http://oldboy.blog.51cto.com                         [  OK  ]

check http://www.baidu.com                                 [  OK  ]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: