shell学习二十九--数组
来源:互联网 发布:java bigdecimal 编辑:程序博客网 时间:2024/04/28 03:43
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 ]
阅读全文
0 0
- shell学习二十九--数组
- 学习笔记(二十九)
- JAVA学习总结二十九
- Java基础---什么是数组(二十九)
- java提高篇(十九)-----数组之二
- 学习总结十九:Hbase数据库shell操作
- java学习笔记(十九)对象数组
- shell 教程二:数组
- Linux实践工程师学习笔记二十九
- 软件工程视频学习笔记(二十九)
- 软件工程视频学习笔记(二十九)
- JAVA学习笔记(二十九)
- JavaScript学习笔记(二十九) method()方法
- LinuxCast学习笔记二十九rsyslog
- python 学习笔记(二十九)
- Redis学习记录之Sentinel(二十九)
- 信息安全工程师 学习笔记(二十九)
- Shell 学习12 - Shell 数组
- hi3531 uboot phy调试总结
- 网络流量抓取与还原系统Xplico架构
- python下redis的hash操作和其他常用操作
- hi3531 SDK 编译 uboot, 修改PHY地址, 修改 uboot 参数 .
- PyTorch入门文档--带你入门优雅的 PyTorch
- shell学习二十九--数组
- HDU1005
- AI与伦理道德
- 虚拟机类加载机制
- 浅析uboot网络程序结构
- 2017年你不能错过的Java类库
- Android图片加载框架比较与使用
- 关闭 Microsoft Word 2010 配置窗口
- oracle数据库<导入,导出>linux系统