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 ]
数组:简单的说就是相同数据类型的元素按一定顺序排列的组合。
数组是把有限的类型相同的变量用一个名字命名,然后用用编号区分他们的变量的集合。
这个名字成为数组名,编号成为数组下标。
何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合
(不包括有一些编程语言提出来的关联数组的概念)。那么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 ]