shell数组应用
引言
在Linux平台上工作,我们经常需要使用shell来编写一些有用、有意义的脚本程序。有时,会经常使用shell数组。那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解,shell中的数组。
数组的定义
何为数组?学过计算机编程语言的同学都知道,数组的特性就是一组数据类型相同的集合(不包括有一些编程语言提出来的关联数组的概念)。那么shell中数组是怎么定义的呢,我们来看两种数据类型:一是数值类型,二是字符串类型;虽然shell本身是弱类型的,但也可以这么区分。
数值类型的数组:一对括号表示数组,数组中元素之间使用“空格”来隔开。
举个列子:
arr_number=(1 2 3 4 5);
字符串类型数组:同样,使用一对括号表示数组,其中数组中的元素使用双引号或者单引号包含,同样使用“空格”来隔开。
arr_string=("abc" "edf" "sss"); 或者 arr_string=('abc' 'edf' 'sss');
数组的操作
我们使用数值类型数组arr_number=(1 2 3 4 5)做为源数组进行相关的讲解:获取数组长度,读取某个下标的值,对某个下标赋值,删除、分配和替换以及遍历。提一个知识点,我们在shell里面想获取某个变量的值,使用$符开头,如:$a或者${a}即可。
获取数组长度
arr_length=${#arr_number[*]}或${#arr_number[@]}均可,即形式:${#数组名[@/*]} 可得到数组的长度。
读取某个下标的值
arr_index2=${arr_number[2]},即形式:${数组名[下标]}
对某个下标赋值
这里需要提出两个问题:
第一个问题是如果该下标元素已经存在,会怎么样?
答:会修改该下标的值为新的指定值。
例如:arr_number[2]=100,数组被修改为(1 2 100 4 5)
第二个问题是如果指定的下标已经超过当前数组的大小,如上述的arr_number的大小为5,指定下标为10或者11或者大于5的任意值会如何?
答:新赋的值被追加到数组的尾部。
例如:arr_number[13]=13,数组被修改为(1 2 100 4 5 13)
删除操作
清除某个元素:unset arr_number[1],这里清除下标为1的数组;
清空整个数组:unset arr_number;
分片访问
分片访问形式为:${数组名[@或*]:开始下标:结束下标},注意,不包括结束下标元素的值。
例如:${arr_number[@]:1:4},这里分片访问开始下标为1到结束下标为4的值结果输出为新数组,但不包括下标为4的值。
模式替换
形式为:${数组名[@或*]/模式/新值}
例如:${arr_number[@]/2/98}
数组的遍历
数组遍历我们使用for语句来演示:
for v in ${arr_number[@]}; do
echo $v;
done
实现数组逆序输出
#!/bin/bash arr=(1 2 3 4 5 6)
let i=0
let j=${#arr[@]}-1 for (( i=0;i<j;i++,j-- ))
do
tmp=${arr[i]}
arr[i]=${arr[j]}
arr[j]=$tmp
done echo ${arr[@]} exit $?
实现冒泡排序
#!/bin/bash
#冒泡排序 arr=(1 0 9 8 6 7) for (( i=0;i<${#arr[@]};i++ ))
do
for (( j=${#arr[@]}-1;j>i;j-- ))
do
if [[ ${arr[j]} -lt ${arr[j-1]} ]]; then
temp=${arr[j]}
arr[j]=${arr[j-1]}
arr[j-1]=${temp}
fi
done
done echo ${arr[@]} exit $?
实现选择排序
#!/bin/bash
#选择排序 arr=(999 0 7 8 7 9 8 9 9 0 9 8 1 2 5 3 2 1 4 5 0 10000 7 65 5)
let length=${#arr[@]} #已排序序列末尾
for (( i=0;i<length-1;i++ ))
do
min=$i
#未排序序列
for (( j=i+1;j<length;j++ ))
do
if [ ${arr[min]} -gt ${arr[j]} ];then
min=$j
fi
done
if [ $min -ne $i ]; then
tmp=${arr[min]}
arr[min]=${arr[i]}
arr[i]=$tmp
fi
done echo ${arr[@]} exit $?
shell数组应用的更多相关文章
- Linux Shell 数组
shell 数组一般都是一维数组. 1. 数组的声明 declare -a arr 该命令将声明一个数组arr,实际上不声明也可以直接定义数组. 2. 数组的初始化 arr=(1 2 3):该命令定义 ...
- shell--2.shell数组
shell 数组 (1)定义数组 shell中,用括号表示数组,数组元素用空格分开,定义数组的一般形式 arrt_name=(val1 val2 val3) 或者 arry_name=(val1 va ...
- Linux Shell数组常用操作详解
Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...
- Shell数组例子
Shell数组例子 循环打印数组,并统计数组的个数: [root@slavedb array]# cat a.sh #!/bin/bash array=( freddy freddie tang sh ...
- Shell数组的增删改查
Shell数组的增删改查 shell数组的定义及取值: a=(1 2 3) [root@bogon tmp]# echo ${a[*]} 1 2 3 [root@bogon tmp]# echo $ ...
- 教你使用shell数组
数组的使用,需要掌握 1.对数组进行赋值 2.通过下标访问数组元素 3.循环遍历所有的元素 代码如下: #!/bin/bash a="39" b="5" c=& ...
- linux shell数组
from: http://www.jb51.net/article/34322.htm bash shell只支持一维数组,但参数个数没有限制. 声明一个数组:declare -a array(其实不 ...
- Shell 数组定义与获取
Shell 数组 bash支持一维数组(不支持多维数组),并且没有限定数组的大小. 类似与 C 语言,数组元素的下标由 0 开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于 ...
- 【Linux】shell数组
一.概念 shell数组就是一个元素集合,它把有限个元素用一个名字来命名,然后用编号对他们分区.这个名字称为数组名,用于区分不同内容的编号称为数组的下标. 二.shell数组的定义与增删改查 1.sh ...
- shell 数组,双层循环打印变量
双层循环,打印循环执行次数. 特别注意 ,shell 脚本赋值时 '=' 两侧不能有空格,否则报错,shell command not found 但在if 语句中需要有: STR1="ab ...
随机推荐
- php数组使用json_encode函数中文被编码成null的原因和解决办法
大写的囧,提客户处理问题,前端的APP一直在叽叽咂咂,说收到的值是null,弄了半天原来是这个问题,记录下吧 json格式在开发中用的十分广泛.在php中json_encode函数可以直接将数组转成 ...
- jquery添加未来元素时,其绑定事件不起作用解决办法
delegate说起对未来元素是其作用的,于是写下代码: <!DOCTYPE HTML> <html> <head> <meta charset=" ...
- 部署hadoop的开发环境
第一步:安装jdk 由于hadoop是java开发的,所以需要JDK来运行代码.这里安装的是jdk1.6. jdk的安装见http://www.cnblogs.com/tommyli/archive/ ...
- 【Hibernate】浅析hibernate中的延迟加载
1 简介 在使用一些查询方法时,方法执行了,但是并没有立刻发送SQL语句查询数据库.而是在访问对象的getXxx方法时候才触发SQL执行加载对象数据.这种机制就称为延迟加载. 2 优点 延迟加载主要是 ...
- codesmith连接postgresql修复bug
转:CodeSmith7代码生成器针对PostgreSQL数据库无法使用的Bug修复全过程 我自己又修改过,完整的PostgreSQLSchemaProvider.cs文件如下 using Npgsq ...
- 在Linux CentOS 6.6上安装RedisLive
Real time dashboard for redis 安装必须软件 1.安装pip到指定的python版本下面: curl -O https://bootstrap.pypa.io/get-pi ...
- 【webservice】使用命令wsimport构建WebService客户端
wsimport命令介绍 在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,然后用这些类文件,就可以像调用本地的类一样调用WebService提供的方 ...
- 【js】在js中加HTML注释标签的原因?
<script type="text/JavaScript"> <!-- js代码 //--> //就是这句,为什么还要在-->前加上js注释 < ...
- Sails入门指南
1.全局观:sails理念,框架结构 2.试用sails的scaffolding工具,创建model,创建controller, 3.启动server,试用blueprint, 4.进阶: 4.0 数 ...
- struts系列:校验(三)国际化
一.设置国际化资源标识 struts可以通过request_locale参数来进行国际化参数设置 例如页面可以通过如下链接完成语言切换: <s:a href="locale.actio ...