Linux Shell 动态生成 数组系列 Seq 使用技巧

点击上方 "程序员小乐"关注, 星标或置顶一起成长

每天凌晨00点00分, 第一时间与你相约

每日英文

The real measure of your wealth is how much you’d be worth if you lost all your money.

真正衡量你的财富的方法是,当你身无分文的时候,你还值多少钱。

每日掏心

因为有一天你可能从沉睡中醒来,发现自己在数星星时竟然失去了月亮。

来自:brsuo | 责编:乐乐

链接:blog.csdn.net/brsuo/article/details/83967404

程序员小乐(ID:study_tech)第 863 次推文  图源:百度

往日回顾:任正非怒批乱裁员:鼠目寸光!裁掉他们,谁来成为华为接班人!

     

   正文   

如果对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); dototal=$(($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 无状态中的 "状态" 到底指的是什么?

这张「二维码」火到了GitHub热榜第一:扫一扫,打破系统边界,文件秒传

一次关于 MySQL 索引优化的思考,看了都说好!

关注订阅号「程序员小乐」,收看更多精彩内容

嘿,你在看吗

版权声明:本文为xiaoxiaole0313原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaoxiaole0313/article/details/106045488

智能推荐

前端小练习:jQuery酷炫照片墙

jQuery酷炫照片墙 效果展示: HTML代码: css代码: jQuery代码: 方法 解释 transform transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转、缩放、移动或倾斜。W3scool Math.random() 产生随机数。编程狮 translate 绘图函数编程狮 attr attr() 方法设置或返回被选元素的属性和值。编程狮 anima...

springMVC拦截器

一、     SpringMVC拦截器实现原理 用户请求到DispatherServlet中,DispatherServlet调用HandlerMapping查找Handler,HandlerMapping返回一个拦截器链(HandlerExecutionChain),springmvc中的拦截器是通过HandlerMapping发起的。 &nbs...

Unity Json反序列化

Json反序列化 结果:...

[机器学习-回归算法]Sklearn之线性回归实战

Sklearn之线性回归实战 一,前言 二,热身例子 三,贸易公司的简单例子 四,Sklearn 官网里的一个例子 参考资料 一,前言 一元线性回归的理论片请看我这个链接 二,热身例子 预测直线 y=1x1+2x2+3y = 1x_1 + 2x_2 +3y=1x1​+2x2​+3 导入LinearRegression 从Sklearn.liear_model 包里 拟合数据也可以说是训练 检验正确...

Android 开发者,你真的懂 Context 吗?

Android Context 详解 前言 一、Context是什么 二、Context结构 1、ContextImpl类介绍 2、ContextWrapper类介绍 3、ContextThemeWrapper 三、Context的数量 四、Context注意事项 五、如何正确回复以上面试题? 前言 Context 相信所有的 Android 开发人员基本上每天都在接触,因为它太常见了。但是这并不...

猜你喜欢

SpringMVC ----Json的简单交互处理

SpringMVC--Json Json的介绍 什么是JSON? JSON 和 JavaScript 对象互转 Controller返回JSON数据 Jackson 乱码 乱码的解决方法一 代码优化 乱码统一解决方法 返回json字符串统一解决 测试多个对象的集合输出 输出时间对象 抽取为工具类 FastJson fastjson 三个主要的类: JSONObject JSONArray JSON...

微信小程序自定义组件简单实现

本文将教你如何实现一个自定义的toast提示框,实现后的基本效果图如下: 小程序中一个自定义组件由 json wxml wxss js 4个文件组成的。下面我们一步一步地来创建文件及完成其中的配置: step1:创建自定义组件 首先创建一个components文件夹,用于放置所有自定义的组件,创建之后的目录结构为 其中的toastedit是我们本次...

PyTorch学习(四)--用PyTorch实现线性回归

教程视频:https://www.bilibili.com/video/BV1tE411s7QT 废话不多说,代码如下: 结果: 0 56.52023696899414 1 25.170454025268555 2 11.214292526245117 3 5.001270771026611 4 2.2352840900421143 5 1.0038176774978638 6 0.4554775...

1、Qt 的窗口组件和窗口类型

1、窗口组件 图形用户界面由不同的窗口和窗口组件组成 组件的类型 — 容器类(父组件):用于包含其它的界面组件 — 功能类(子组件):用于实现特定的交互功能 Qt 中没有父组件的顶级组件叫做窗口 QWidget QWidget 继承于 QObject 和 QPaintDevice — QObject 是所有支持 Qt 对象模型的基类 — QPaint...

从APP跳转到微信指定联系人聊天页面功能的实现与采坑之旅

从APP跳转到微信指定联系人聊天页面功能的实现与采坑之旅 起因 实现逻辑 效果图 实现过程 跳转微信按钮点击事件 无障碍监听主要方法 一些必要的参数 监听主要方法 遇到的坑 1. 搜索内容无法赋值给搜索框 2. 如何停止监听? 3. 没查询到结果如何停止监听? 4. 如果在微信其他页面怎么办? 5. 页面改变UI加载太慢 6. 聊天界面和主页面是同一个活动 7. 搜索不到结果时,发现他在搜索结果页...