定义数组的方法:
传统
[root@web01 ~]# array=(a b c d)
[root@web01 ~]# echo ${array[*]}
a b c d
多行元素信息定义数组
array=(
http://www.baidu.com
http://www.google.com
http://bbs.dz.com
)
指定数组元素下标定义方式
[root@web01 ~]# array=([1]=a [2]=b [3]=c)
[root@web01 ~]# echo ${array[1]}
a
[root@web01 ~]# array[1]=fake
[root@web01 ~]# array[2]=hydra
[root@web01 ~]# echo ${array[1]}
fake
动态定义数组元素信息
[root@web01 ~]# array=(`ls /root`)
[root@web01 ~]# echo ${array[0]}
anaconda-ks.cfg
[root@web01 ~]# ls
anaconda-ks.cfg install.log.syslog
调用数组中的元素
[root@web01 ~]# echo ${array[@]}
a b c d
[root@web01 ~]# echo ${array[0]}
a
[root@web01 ~]# echo ${array[1]}
b
[root@web01 ~]# echo ${array[2]}
c
[root@web01 ~]# echo ${array[3]}
d
统计数组中元素的长度
[root@web01 ~]# echo ${#array[*]}
4
[root@web01 ~]# array=(fake hydra)
[root@web01 ~]# echo ${#array[*]}
2
测试练习
习题一:
读取下面字符串的内容,读取出小于3的字符串,并进行打印
i am a student my name is fakehydra
解题:
数组解:
[root@web01 scripts]# cat zy03.sh
array=(i am a student my name is fakehydra)
for ((i=0;i<${#array[@]};i++))
do
if [ ${#array[i]} -lt 3 ]
then
echo ${array[i]}
fi
done
利用awk进行解:
echo "I am oldboy teacher I am 35"|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i}'
echo "I am oldboy teacher I am 35"|xargs -n1|awk '{if(length($1)<3)print $1}'
echo "I am oldboy teacher I am 35"|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i;else print $0}'
习题二:
批量检查多个网站地址是否正常
具体要求:
①. 使用shell数组方法实现, 检测策略尽量模拟用户访问
②. 每10秒钟做一次所有的检测, 无法访问的输出报警
③. 待检测的地址信息
http://blog.oldboyedu.com
http://blog.etiantian.org
http://oldboy.blog.51cto.com
http://10.0.0.7
解题:
[root@web01 scripts]# cat zy04.sh
array=(
http://blog.oldboyedu.com
http://blog.etiantian.org
http://oldboy.blog.51cto.com
http://10.0.0.7
)
main (){
for ((i=0;i<${#array[@]};i++))
do
wget -T 5 -t 3 -q --spider ${array[$i]}
if [ $? -eq 0 ]
then
echo "${array[$i]} 访问ok"
else
echo "${array[$i]} 访问失败"
fi
done
}
while true
do
main
sleep 10
done