第1章 问题:
群友问了个问题:我shell,我怎么才只打出100,110,120.....190 201,211,......291 ,302,312,322....392 这种格式的数据
第2章 问题分析
2.1 需求:
我这个会用在数据库,前面10个库,我如果是第一个库,我就会建表00 10 20 。。。90 。第二个库就用01 ,11 ,,,91
2.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 493
awk可以做,其实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 493
shell也不甘示弱,我也有三目运算符啊。
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.
难免有不足之处请大家指正谢谢。
转载于:https://blog.51cto.com/lidao/1782422