`

shell学习之数组使用技巧

 
阅读更多

数组的使用
$ a=(1 2 3 4 5)
$ echo $a
1

一对括号表示是数组,数组元素用“空格”符号分割开。
数组读取与赋值
得到长度:
$ echo ${#a[@]}
5
用${#数组名[@或*]} 可以得到数组长度
读取:
$ echo ${a[2]} 
3
$ echo ${a[*]} 
1 2 3 4 5 
  
用${数组名[下标]} 下标是从0开始  下标是:*或者@ 得到整个数组内容
赋值:

$ a[1]=100
$ echo ${a[*]} 
1 100 3 4 5
$ a[5]=100     
$ echo ${a[*]}

1 100 3 4 5 100
直接通过数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素
删除:
$ a=(1 2 3 4 5)
$ unset a

$ echo ${a[*]}

$ a=(1 2 3 4 5)
$ unset a[1]  
$ echo ${a[*]}
1 3 4 5
$ echo ${#a[*]}
4

直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。
特殊使用
分片:

$ a=(1 2 3 4 5)
$ echo ${a[@]:0:3}
1 2 3
$ echo ${a[@]:1:4}
2 3 4 5
$ c=(${a[@]:1:4})
$ echo ${#c[@]}
4
$ echo ${c[*]}
2 3 4 5

直接通过${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。
替换:
$ a=(1 2 3 4 5)   
$ echo ${a[@]/3/100}
1 2 100 4 5
$ echo ${a[@]}
1 2 3 4 5
$ a=(${a[@]/3/100})
$ echo ${a[@]}    
1 2 100 4 5

调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。
从上面讲到的,大家可以发现linux shell 的数组已经很强大了,常见的操作已经绰绰有余了
这里主要以一个求和计算的题目为,介绍使用seq动态生成数组系列
样例进行分析
题目:请用linux shell 写一段脚本,实现从1..1000中所有偶数的和值。
方法一: 通过
while 循环得到需要的结果:
start=1;
total=0;
while [ $start -le 1000 ];do
    [[ $(($start%2)) == 0 ]]&&total=$(($total+$start));
   start=$(($start+1));
done;
echo $total;
[chengmo@centos5 ~]$ start=1;total=0;while [ $start -le 1000 ];do    [[ $(($start%2)) == 0 ]]&&total=$(($total+$start));   start=$(($start+1));done;echo $total;
250500

以上运行结果是:250500,在linux shell 中,”;”作为命令行分隔符。如果大家对于$(()) 运算符号不是很理解,可以查看:linux shell 实现四则运算。
http://czmmiao.iteye.com/blog/1439397
也可以参考另外一篇文章linux shell 逻辑运算符、逻辑表达式详解。
http://czmmiao.iteye.com/blog/1439403
方法二:通过for 循环得到结果:
start=0;
total=0;
for i in $(seq $start 2 1000); do
    total=$(($total+$i));
done;
echo $total;
[chengmo@centos5 ~]$ start=0;total=0;for i in $(seq $start 2 1000); do  total=$(($total+$i));done;echo $total;        
250500

上面语句已经代码方面明显优于方法一,而且性能方面表现也很好。下面比较性能就可以发现:
[chengmo@centos5 ~]$ time (start=0;total=0;for i in $(seq $start 2 1000);
do    total=$(($total+$i));done;echo $total;)            
250500
real    0m0.016s
user    0m0.012s
sys     0m0.003s
$ time (start=1;total=0;while [ $start -le 1000 ];do    [[ $(($start%2)) == 0 ]]&&total=$(($total+$start));   start=$(($start+1));done;echo $total;) 
250500
real    0m0.073s
user    0m0.069s
sys     0m0.004s

方法一耗时是方法二的6倍!
seq 使用
seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST
$seq 1000    ‘起始默认是 1,间隔默认也是1
$seq 2 1000   ‘间隔默认是1
$seq 1 3 10     '从1开始,到10 间隔为3 结果是:1 4 7 10 说明:默认间隔是
“空格” 如果想换成其它的可以带参数:-s
$seq -s'#' 1 3 10
1#4#7#10

应用技巧:
生成连续数组系列:
$ a=($(seq  1 3 10))    
$ echo ${a[1]}
4
$ echo ${a[@]}
1 4 7 10

生成连续相同字符:

$ seq -s '#' 30 | sed -e 's/[0-9]*//g'
#############################

上面例子:通过加入间隔字符‘#’后,替换掉数字, 生成连续相同字符’#’,这个在以后书写中还是有不少帮助。


参考至:http://wenku.baidu.com/view/d5d06b5bbe23482fb4da4c0c.html

如有错误,欢迎指正

邮箱:czmcj@163.com

分享到:
评论

相关推荐

    linux shell 中数组的定义和for循环遍历的方法

    与C、C++或Java等编程语言不同,Shell中的数组处理方式有一些特殊的规则和技巧。本文将详细介绍如何在Linux Shell中定义数组以及如何使用`for`循环遍历数组。 ### 数组的定义 在Linux Shell中,定义数组的语法如下...

    Shell学习笔记

    本文档《Shell学习笔记》详细介绍了Shell脚本编写的基础知识和一些高级技巧,包含了多个主题,例如终端操作、环境变量使用、数学运算、文件描述符、数组和关联数组、别名使用、终端信息获取、日期和时间处理、脚本...

    shell脚本学习手册

    ### Shell脚本学习手册知识点概览 #### 一、Shell脚本基础 ...以上是对《shell脚本学习手册》中提到的主要知识点的详细解析,涵盖了从基本概念到具体应用的各种细节,有助于初学者全面理解Shell脚本的编写技巧。

    C语言中文网shell脚本教程

    通过这些教程,学习者可以全面了解Shell脚本编程的基础知识,掌握编写高效、可靠的Shell脚本的技巧,从而更好地管理和自动化Linux系统。每个HTML文件都包含了丰富的实例和实践指导,是提升Shell脚本技能的理想资源。

    shell脚本学习指南

    本文将深入探讨shell脚本的基础知识,包括语法、变量、控制结构、函数以及在实际应用中的常见技巧。 一、Shell脚本基础 1. **什么是Shell**:Shell是操作系统提供的一种命令行界面,它允许用户通过输入指令来与...

    shell脚本学习指南pdf

    作为学习Shell脚本的指南,这本书籍旨在帮助读者深入理解Shell脚本语言的原理,掌握编写高效、可维护脚本的技巧。 1. **基础概念** - **Shell**: Shell是用户与操作系统内核之间的接口,它提供了一种命令行界面,...

    shell脚本学习指南-中文版

    12. **调试技巧**:使用`set -x`开启命令追踪,`set -v`显示变量赋值,`set -n`检查语法但不执行,帮助调试脚本。 13. **脚本优化**:了解`alias`和`function`的区别,避免使用`eval`,使用命令组合(如`&&`和`||`...

    shell 24小时学编程

    10. Shell函数和数组:掌握Shell中的数组使用,以及如何在函数中操作数组。 11. 调试和错误处理:学习如何使用set命令进行调试,以及如何处理脚本运行时的错误。 12. 高级话题:探索高级特性,如陷阱(traps)、子...

    Shell脚本学习教程PDF版

    错误处理和调试技巧也是学习的重要环节。了解如何捕获和处理脚本运行时的错误,以及如何利用set命令来开启或关闭脚本的不同执行模式,对于编写健壮的脚本至关重要。 最后,脚本的权限和执行方式也很关键。了解如何...

    shell基础学习资料.rar

    Shell是Linux和Unix操作系统中的命令解释器,它提供了一个用户...通过深入学习以上知识点,并结合"shell_study"中的教程和实践,你将能够熟练掌握Shell的基本操作和编程技巧,从而更高效地管理和控制Linux或Unix系统。

    linux red hat shell 学习 提高 入门 进阶 居家必备linux

    学习数组、函数的高级用法,以及如何调用外部程序和处理返回值。了解shell脚本调试方法,如set命令的使用,以及利用shopt选项来优化脚本执行。 5. 自学与提高: 居家自学Linux Red Hat和Shell,可以借助在线教程、...

    SHELL编程学习21天

    "SHELL编程学习21天"可能是一个教程计划,旨在帮助学习者在21天内掌握Shell脚本编写的基本概念和高级技巧。接下来,我们将深入探讨Shell编程的核心知识点。 **1. Shell介绍** Shell是操作系统提供的一个命令解释器...

    shell高级命令学习

    5. **调试技巧**:学习使用set命令进行调试,找出脚本中的错误。 最后,`crontab.pdf`文档会讲解Linux的任务调度器`crontab`: 1. **crontab文件结构**:理解每行代表一个定时任务,包括时间字段(分钟、小时、...

    SHELL脚本学习指南

    **SHELL脚本学习指南** 在信息技术领域,Shell脚本是一种强大的工具,尤其在Linux和Unix系统中,它被广泛用于自动化日常任务、系统管理以及软件部署。本指南将深入探讨Shell脚本的基础和高级概念,帮助你充分利用这...

    liunx shell学习指南

    Linux Shell学习指南是针对Linux操作系统中的命令行接口——Shell,进行深入学习的资源。Shell是用户与Linux内核交互的桥梁,它提供了命令行界面,允许用户通过输入指令执行各种任务。对于初学者来说,掌握Shell编程...

    最经典的unix shell学习资料

    本书《最经典的Unix Shell学习资料》旨在全面深入地介绍Unix系统中的Bash Shell,不仅涵盖了基础概念,还涉及了高级技巧,是一本适用于各水平读者的综合指南。无论您是初学者还是经验丰富的用户,都能从中获取有价值...

    shell学习教程

    Shell是Linux和Unix系统中的...通过这个Shell学习教程,你将能够熟练地使用Shell进行日常操作,编写高效的自动化脚本,进一步提升你在Linux环境中的工作效率。无论你是系统管理员还是开发者,Shell技能都是必不可少的。

    shell 学习资料

    学习更高级的Shell技巧,如命令别名、函数、数组、陷阱(trap)和进程控制,可以帮助你更好地定制Shell环境。例如,定义命令别名可以简化常用命令的输入,如`alias ll='ls -l'`。而进程控制(如bg、fg、jobs)则能...

    linux的shell脚本的学习,适合初学者使用

    ### Linux Shell 脚本学习指南 #### 一、Shell 编程的重要性 在 Linux 系统中,尽管存在各种图形界面工具,但 Shell 仍然是一个极其强大的工具。Shell 不仅仅是一个命令集,还是一种非常实用的编程语言。通过 ...

    shell命令学习资料

    "免费):Shell脚本学习指南00009.pdf"和"免费):Shell脚本学习指南00001.pdf"可能是同一系列教程的不同章节,它们会提供逐步指导,从基础到高级,涵盖变量、流程控制、数组、函数、错误处理和调试技巧等主题。...

Global site tag (gtag.js) - Google Analytics