经典-输出规律的数字序列
2016-05-24 11:16
375 查看
第1章 问题:
群友问了个问题:我shell,我怎么才只打出100,110,120.....190 201,211,......291 ,302,312,322....392 这种格式的数据第2章 问题分析
2.1 需求:
我这个会用在数据库,前面10个库,我如果是第一个库,我就会建表00 10 20 。。。90 。第二个库就用01 ,11 ,,,912.2 分析
一个循环加一个if就可以,干嘛双循环呢因为不管怎么变,步进都是10,所以根本没必要1个1个循环,10个10个就行这时候就得考虑每到100的时候+1所以就这么个思路此处感谢潜艇大叔,提供思路。2.3 想要的结果
110 120 130 140 150 160 170 180 190 211 221 231 241 251 261 271 281 291 312 322 332 342 352 362 372 382 392 413 423 433 443 453 463 473 483 493 514 524 534 544 554 564 574 584 594 615 625 635 645 655 665 675 685 695 716 726 736 746 756 766 776 786 796 817 827 837 847 857 867 877 887 897 918 928 938 948 958 968 978 988 998 1019 1029 1039 1049 1059 1069 1079 1089 1099
第3章 解答方法
注:(为了节约空间只显示到500)3.1 方法一-awk01-循环+判断
[root@show scripts]# awk 'BEGIN{for(i=100;i<=500;i+=10){j++;print i;if(j%10==0)i++}}' 100 110 120 130 140 150 160 170 180 190 201 211 221 231 241 251 261 271 281 291 302 312 322 332 342 352 362 372 382 392 403 413 423 433 443 453 463 473 483 493思路很简单,通过j变量控制循环,每10次 使得i的值+1(既i++)目的是达到 201 302 403 这种效果。
3.2 方法二-awk02-循环+三目运算符
[root@show scripts]# awk 'BEGIN{for(i=100;i<=500;i+=10){j++;print(j%10==0?i++:i)}}' 100 110 120 130 140 150 160 170 180 190 201 211 221 231 241 251 261 271 281 291 302 312 322 332 342 352 362 372 382 392 403 413 423 433 443 453 463 473 483 493三目运算符:相当于if xxx ;then xxxx; xxx fi 条件判断。也是很好的方法。
3.3 方法三-shell01-循环+判断
#!/bin/bash for((i=100;i<=$1;i+=10)) do let j++ echo $i if [ $((j%10)) -eq 0 ];then let i++ fi done [root@show scripts]# sh seq.sh 500 100 110 120 130 140 150 160 170 180 190 201 211 221 231 241 251 261 271 281 291 302 312 322 332 342 352 362 372 382 392 403 413 423 433 443 453 463 473 483 493awk可以做,其实shell也可以实现的。
思路一致的。3.4方法四-shell02-循环+三目运算符
#!/bin/bash for((i=100;i<=500;i+=10)) do let j++ echo $((j%10==0?i++:i)) done [root@show scripts]# sh seq.sh 500 100 110 120 130 140 150 160 170 180 190 201 211 221 231 241 251 261 271 281 291 302 312 322 332 342 352 362 372 382 392 403 413 423 433 443 453 463 473 483 493shell也不甘示弱,我也有三目运算符啊。
3.5 方法五-shell02-不推荐-没效率
#!/bin/bash for((i=1;i<=5;i++)) do for((j=10;j<=90;j+=10)) do middle=`printf %02d"$j"` num=$i$((middle+i-1)) echo $num done done [root@show scripts]# sh seq2.sh 110 120 130 140 150 160 170 180 190 211 221 231 241 251 261 271 281 291 312 322 332 342 352 362 372 382 392 413 423 433 443 453 463 473 483 493 514 524 534 544 554 564 574 584 594最简单的思路,可是双层嵌套循环,没有效率。
第4章 总结
最核心的是算法,到底如何做。
一个循环,每十次自动加1.
难免有不足之处请大家指正谢谢。
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- 文本处理工具AWK详解
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- shell字符串操作详解
- Shell中删除某些文件外所有文件的3个方法
- Ruby中执行Linux shell命令的六种方法详解
- VB使用shell函数打开外部exe程序的实现方法
- Shell编程的一些知识集合
- Shell中的for和while循环详细总结
- 什么是Shell?Shell脚本基础知识详细介绍
- Shell脚本中引用、调用另一个脚本文件的2种方法
- Shell脚本解压rpm软件包
- Linux Shell 数组建立及使用技巧
- Shell脚本实现复制文件到多台服务器的代码分享
- Shell脚本实现批量替换文件内容
- Shell脚本实现的一个简易Web服务器例子分享