shell数组的定义:
方法1:用小扩话将变量值括起来赋值给数组变量,每个变量值之间要用空格进行分割。
语法如下:
array=(value1 value2 value3 ....) #常用
方法2:用小括号将变量值括起来,同时采用键值对的形式赋值。
最三种比较麻烦,不使用。
第四种方法是动态定义数组变量,并使用命令的输出结果作为数组的内容:
array=($(命令))
或者:
array=(`命令`)
13.2.2 shell脚本打印及输出
3.数组赋值: 删除是要使用unset删除下标
5.数组内容的截取和替换
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
转载于:https://blog.51cto.com/11726212/2071636