shell数组的定义:

方法1:用小扩话将变量值括起来赋值给数组变量,每个变量值之间要用空格进行分割。

语法如下:

array=(value1  value2 value3 ....)   #常用

     image.png

方法2:用小括号将变量值括起来,同时采用键值对的形式赋值。

image.png

最三种比较麻烦,不使用。


第四种方法是动态定义数组变量,并使用命令的输出结果作为数组的内容:

array=($(命令))

或者:

array=(`命令`)

image.png

13.2.2 shell脚本打印及输出

image.png

3.数组赋值: 删除是要使用unset删除下标

image.png

5.数组内容的截取和替换

image.png

13.3shell数组脚本开发实践

范例13-1:使用循环批量修改数组的元素

#!/bin/bash

aa=(1 2 3 4)
for ((i=0;i<${#aa[*]};i++))
do
  echo ${aa[i]}
done

另一种方式:
#!/bin/bash

aa=(
1
2
3
4
)
for ((i=0;i<${#aa[*]};i++))
do
  echo ${aa[i]}
done
~                                                                                      
~

范例13-3 将命令的结果作为数组元素定义并打印

#!/bin/bash

b=($(ls /tmp/xpg/))

for i in `seq ${#b[*]}`
do
  c=$(($i-1))
  echo "this is "$i" num,the num is ${b[c]}"
done

13.4 shell数组的重要命令

(1)定义命令:

静态数组:

array=(1 2 3)

动态数组

array=($(ls /tmp/xpg))

(2) 打印命令

打印出所有值

${array[@]} 或者 ${array[*]}  

打印数组长度

${#array[@]} 或者 ${#array[*]}

打印单个元素:

${array[i]}


13.5 shell数组相关面试题及高级实战案例

范例13-4:利用base循环打印下面这句话中字母数不大于6的单词(某企业面试题)

I am oldboy teacher welcome to oldboy  training  class

#!/bin/bash
aa=(I am oldboy teacher welcome to oldboy  training  class)

for ((i=0;i<${#aa[*]};i++))
do
  b="`echo ${aa[i]} | wc -L`"
  if [ $b -lt 6 ]; then
    echo -ne "${aa[i]} "
  fi
done
echo " "
~

范例13-5 批量检查多个网站是否正常

1)使用shell数组的方法实现,检测策略尽量模拟用户访问

2)每10秒进行一次全部检测,发文访问的输出报警

3)待测试的地址如下

http://bolg.oldboyedu.com

http://blogetiantian.org

http://oldboy.blog.51cto.com

http://192.168.116.135

#!/bin/bash
#this shell created by huipg
#mail:1159291043@qq.com
#
source /etc/init.d/functions
export LANG="zh_CN.UTF-8"
test=(
http://www.baidu.com
http://www.taobao.com
http://www.blog.51cto.com
http://192.168.116.135
)


sta() {
  for ((i=1;i<6;i++))
  do
    echo -n "."
    sleep 1
  done
  echo  " "
}

check_url() {

for ((i=0;i<${#test[*]};i++))
do
  wget -o /dev/null -T 5 --spider --tries=1 ${test[i]} >/dev/null
  if [ $? -eq 0 ]; then
    action "this URL:"${test[i]}" is ok"  /bin/true
  else
    action "this URL:"${test[i]}" is bad"  /bin/false
  fi
  sleep 10
done
}

main() {
while true
do

  echo "---开始测试---"
  sleep 10
  echo  "---请稍后---"
  sta
  check_url
done
}
main