经过前面几期的铺垫,终于可以开始shell的具体语法阶段了。这一期主要学习for循环语言法。主要分六个章节:for循环的一个铺垫:seq命令shell脚本的语法介绍for循环的两种语法for循环的例子(一)输出乘法口诀for循环的例子(二)创建一批文件并向里面写内容for循环的例子(三)输出刚才创建的文件内容一、for循环的一个铺垫seq命令命令:seq作用:输出有序的序列选项: -s 指定分隔符 -w 等宽输出用0填充参数:后面跟上序列的起和止,中间可以跟上步长值,步长默认是1 使用示例:root@debian:~/test# seq 1 5 1 2 3 4 5 root@debian:~/test# seq -s " " 1 5 1 2 3 4 5 root@debian:~/test# seq -w 1 13 01 02 03 04 05 06 07 08 09 10 11 12 13 root@debian:~/test# seq -w 1 3 13 01 04 07 10 13 root@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/bash for ((i=1; i<10; i++));do echo $i done 上面就是类C的循环语法。也很常用。四、for循环的例子(一)输出乘法口诀 直接上代码:#!/bin/bash for ((i=1; i<10; i++));do for ((j=1; j<=i; j++));do echo -en "$j*$i=$((i*j)) " 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是把转义的 输出为制表符。echo ""就是换行的意思。经过双层for循环输出完整9*9乘法口诀表。 大家看到了,我一般写代码喜欢节省代码行数,这样的习惯是想尽量让代码更简洁。行数更少,便于阅读,突出核心代码。你试想一下,假如你看代码几乎所有行都是换行,do,{,},done这些看着方便呢,还是说我一看就知道重点是在:echo -en这一行。这是个个人习惯。当然可能对需要按行数算kpi绩效的公司企业就另当别论了。五、for循环的例子(二)创建一批文件并向里面写内容 直接上代码:#!/bin/bash for n in $(seq 1 10);do echo "test test$n" > file_$n done 上面的代码使用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/bash for 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 test1 test test10 test test2 test test3 test test4 test test5 test test6 test test7 test test8 test test9 这一期就分享到这里,其它的for语法可以自行试一下。感谢大家的支持,抽空再继续。