前端之家收集整理的这篇文章主要介绍了
shell学习二十九--数组,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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 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 ]
原文链接:https://www.f2er.com/bash/389420.html