`
wode66
  • 浏览: 742668 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux shell 动态生成 数组系列 seq使用技巧

 
阅读更多

 

如果对linux shell 数组不是很熟悉的话,请看上一篇文章:linux shell 数组建立及使用技巧  ,这篇文章主要讲是动态生成数组系列。方法应该很多,我这里主要以一个求和计算的题目为例进行分析。

 

题目:请用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

以上运行结果是:249500,在linux shell 中,”;”作为命令行分隔符。如果大家对于$(()) 运算符号不是很理解,可以查看:linux shell 实现 四则运算(整数及浮点) 简单方法  ,如果对于:[[]] [] 符号,可以参考另外一篇文章linux shell 逻辑运算符、逻辑表达式详解

 

方法二:

通过 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
[chengmo@centos5 ~]$ 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

[chengmo@centos5 ~]$ seq 1000   ‘起始默认是 1,间隔默认也是1

[chengmo@centos5 ~]$seq 2 1000  ‘间隔默认是1

[chengmo@centos5 ~]$seq 1 3 10    '从1开始,到10 间隔为3 结果是:1 4 7 10

说明:默认间隔是“空格” 如果想换成其它的可以带参数:-s

[chengmo@centos5 ~]$seq -s'#' 1 3 10

1#4#7#10

 

应用技巧:

  •  
    • 生成连续数组系列:

[chengmo@centos5 ~]$ a=($(seq  1 3 10))    
[chengmo@centos5 ~]$ echo ${a[1]}
4
[chengmo@centos5 ~]$ echo ${a[@]}
1 4 7 10

 

  •  
    • 生成连续相同字符:

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

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

 

 

转载自:http://www.cnblogs.com/chengmo/archive/2010/09/30/1839668.html

 

分享到:
评论

相关推荐

    Shell中创建序列和数组(list、array)的方法

    关于linux数组定义,以及生成方法,请看:linux shell 动态生成 数组系列 seq使用技巧 。这里我主要说的是高效生成list 字符串,还有数组方法。   一、seq方法生成: [chengmo@centos5 shell]$ aNumList=$(seq ...

    Shell动态生成数组的多种方法

    在Linux Shell编程中,动态生成数组是一项常见的任务,尤其在处理数据集合或执行循环操作时。本文主要介绍三种方法来动态创建数组,包括while循环法、for循环法以及使用seq命令生成数组法。 首先,我们来看while...

    linux_shell_数组建立及使用技巧.docx

    在实际应用中,动态生成数组非常有用。例如,可以使用`seq`命令创建一个数字序列,然后将其存储为数组。假设我们要创建一个包含1到1000之间所有偶数的数组并求和,可以这样做: ```bash start=1 total=0 while [ $...

    Linux在shell中自动生成1到100的数组方法(两种方法)

    之前自己在写shell脚本的时候,需要... 使用{1..100}这种方式简单明了,大家也可以在linux命令模式下直接:echo {1..100}看一下效果。  第二种方法:  使用seq函数  for i in `seq 1 100`  do  echo $i  done

    Linux shell数组与关联数组的用法实例

    本篇将详细讲解Linux Shell中的两种数组类型:序列数组和关联数组,并提供实例来帮助理解它们的使用方法。 1. **关联数组** 关联数组,也称为哈希表或字典,允许我们使用任意字符串作为索引来存储和检索值。在...

    LINUX and SHELL 自学总结

    1. #SEQ方法生成 10 2. 通过内部{BEGIN..END}生成 11 3. 以性能比较 11 4. 数组 11 八、LINUX系统常用配置方法及命令 11 1. 网卡相关的TCP/IP网络配置文件地址 11 2. #NETCONFIG命令可以永久保存设置 11 3. #NEAT或...

    shell编程-监控硬盘使用率脚本

    ### Shell编程:监控硬盘使用率脚本 #### 知识点概述 本文将详细介绍一个用于监控服务器硬盘使用率并通过短信或邮件发送报警信息的Shell脚本。该脚本通过解析`df -h`命令的输出来获取各分区的使用情况,并根据使用...

    shell脚本.pdf

    Shell脚本是一种脚本编程语言,通过一系列命令来控制Linux或Unix系统的行为。它是系统管理员常用的一种工具,用于自动化任务执行、系统管理等场景。 #### 二、Shell脚本的规则 ##### 1. 变量的规则 - **定义变量...

    使用for循环打印1到N

    本文将深入探讨如何使用for循环在Shell中打印从1到N的数字,以及与之相关的Ubuntu和Linux环境下的基础知识。 首先,让我们解析标题中的"使用for循环打印1到N"。在Shell编程中,for循环是一种控制流程结构,用于迭代...

    Shell实现程序造死循环的几种方法示例

    在Linux环境中,Shell脚本是一种非常强大的工具,它可以帮助用户自动化执行一系列任务。其中,死循环是常见的逻辑控制结构之一,它可以使程序持续运行,直到满足特定条件才退出。这对于需要长时间监控或执行某些操作...

    北邮2017研究生linux期末作业源代码

    ### 北邮2017研究生Linux期末作业知识点解析 #### 第一大题:Shell命令实践 ...这些练习不仅帮助学生加深对Linux命令的理解和应用能力,还锻炼了他们的脚本编写技巧,对于实际工作中的自动化任务处理非常有帮助。

    shell—for循环语句

    在Linux Shell脚本编程中,`for`循环是一种常见的控制流结构,用于执行一系列命令多次。这个循环结构在处理重复任务、遍历数组或者在指定范围内迭代时非常有用。这里我们将详细探讨三种不同类型的`for`循环语句,并...

Global site tag (gtag.js) - Google Analytics