龙空技术网

每天2分钟学习unix/linux系统shell编程(九)-for循环详解

程序缘来啦 428

前言:

如今你们对“for循环的执行流程是怎样的请简单阐述”大约比较关注,我们都想要剖析一些“for循环的执行流程是怎样的请简单阐述”的相关知识。那么小编也在网摘上汇集了一些对于“for循环的执行流程是怎样的请简单阐述””的相关知识,希望各位老铁们能喜欢,大家快快来了解一下吧!

经过前面几期的铺垫,终于可以开始shell的具体语法阶段了。这一期主要学习for循环语言法。主要分六个章节:

for循环的一个铺垫:seq命令shell脚本的语法介绍for循环的两种语法for循环的例子(一)输出乘法口诀for循环的例子(二)创建一批文件并向里面写内容for循环的例子(三)输出刚才创建的文件内容一、for循环的一个铺垫seq命令命令:seq作用:输出有序的序列选项:

-s 指定分隔符

-w 等宽输出用0填充

参数:后面跟上序列的起和止,中间可以跟上步长值,步长默认是1

使用示例:

root@debian:~/test# seq 1 512345root@debian:~/test# seq -s " " 1 51 2 3 4 5root@debian:~/test# seq -w 1 1301020304050607080910111213root@debian:~/test# seq -w 1 3 130104071013root@debian:~/test# 
二、shell脚本的语法介绍

shell脚本固定格式:

#!/bin/sh命令一命令二命令三......

上是面shell最基本的格式。第一行是指定使用哪个shell来解释这个脚本,如果像示例中使用的/bin/sh则是使用系统默认的。可以通过ls -l /bin/sh看具体指向是哪个shell,其它选项可以指定/bin/bash, /bin/csh,/bin/ksh,一般常见就是bash,当然也可直接使用系统默认的。

shell脚本中几个特殊的指令,需要大家知道:

$@: 所有命令行传入的参数或者给函数传入的参数内容$#: 传入参数的个数$0: 文件名,是指这个脚本的名字$n: 取传入的参数的第几个参数的内容。$*: 所有命令行传入的参数或者给函数传入的参数内容

shell脚本中的注释是使用#开头的,鼓励写脚本时多写注释,注释最好写英文,因为很多Linux环境不一定支持中文,很有可能下次打开是乱码。

三、for循环的两种语法2.1 基本语法

for 自定义变量名 in 元素列表;do        ......done

稍微解释一下,取元素列表中的成员,每取一个执行......位置所写的代码。直到取完结束。

下面列一下这种语法的常用格式:

for line in $(ls) #对ls的结果进行循环执行for file in /home/test/* #对/home/test/下所有的文件和文件夹执行循环for n in $(seq 1 10) #对1-10中每一个数据进行循环,刚才已经讲到过。for log in /log/*.log #对/log/目录中所有以.log结尾的文件进行循环。for n in {1…10} #对1-10中每一个数据进行循环for Iine in $(< file) #对file文件中的内容每一行执行循环for arg in "$@" #对传入的参数进行循环2.2 bash支持的语法

#!/bin/bashfor ((i=1; i<10; i++));do        echo $idone

上面就是类C的循环语法。也很常用。

四、for循环的例子(一)输出乘法口诀

直接上代码:

#!/bin/bashfor ((i=1; i<10; i++));do	for ((j=1; j<=i; j++));do		echo -en "$j*$i=$((i*j))\t"	done	echo ""done

上面的代码使用vi在终端创建一个test.sh,然后使用chmod +x test.sh给予可执行权限。然后执行./test.sh就能看到以下效果:

root@debian:~/test/test# ./test.sh 1*1=1	1*2=2	2*2=4	1*3=3	2*3=6	3*3=9	1*4=4	2*4=8	3*4=12	4*4=16	1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81

解释:echo -n是输出但不换行,-e是把转义的\t输出为制表符。echo ""就是换行的意思。经过双层for循环输出完整9*9乘法口诀表。

大家看到了,我一般写代码喜欢节省代码行数,这样的习惯是想尽量让代码更简洁。行数更少,便于阅读,突出核心代码。你试想一下,假如你看代码几乎所有行都是换行,do,{,},done这些看着方便呢,还是说我一看就知道重点是在:echo -en这一行。这是个个人习惯。当然可能对需要按行数算kpi绩效的公司企业就另当别论了。

五、for循环的例子(二)创建一批文件并向里面写内容

直接上代码:

#!/bin/bashfor n in $(seq 1 10);do	echo "test test$n" > file_$ndone 

上面的代码使用vi在终端创建一个test2.sh,然后使用chmod +x test2.sh给予可执行权限。然后执行./test2.sh就会创建出以下文件,并写了test test$n的内容:

file_1  file_10  file_2  file_3  file_4  file_5  file_6  file_7  file_8  file_9
六、for循环的例子(三)输出刚才创建的文件内容

直接上代码:

#!/bin/bashfor f in $(ls file_*);do	cat $f	done

上面的代码使用vi在终端创建一个test3.sh,然后使用chmod +x test3.sh给予可执行权限。然后执行./test3.sh就会输出每个file开头的文件内容:

root@debian:~/test/test# ./test3.sh test test1test test10test test2test test3test test4test test5test test6test test7test test8test test9

这一期就分享到这里,其它的for语法可以自行试一下。感谢大家的支持,抽空再继续。

标签: #for循环的执行流程是怎样的请简单阐述