经过前面几期的铺垫,终于可以开始shell的具体语法阶段了。这一期主要学习for循环语言法。主要分六个章节:
-s 指定分隔符
-w 等宽输出用0填充
使用示例:
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脚本固定格式:
#!/bin/sh
命令一
命令二
命令三
......
上是面shell最基本的格式。第一行是指定使用哪个shell来解释这个脚本,如果像示例中使用的/bin/sh则是使用系统默认的。可以通过ls -l /bin/sh看具体指向是哪个shell,其它选项可以指定/bin/bash, /bin/csh,/bin/ksh,一般常见就是bash,当然也可直接使用系统默认的。
shell脚本中几个特殊的指令,需要大家知道:
shell脚本中的注释是使用#开头的,鼓励写脚本时多写注释,注释最好写英文,因为很多Linux环境不一定支持中文,很有可能下次打开是乱码。
for 自定义变量名 in 元素列表;do
......
done
稍微解释一下,取元素列表中的成员,每取一个执行......位置所写的代码。直到取完结束。
下面列一下这种语法的常用格式:
#!/bin/bash
for ((i=1; i<10; i++));do
echo $i
done
上面就是类C的循环语法。也很常用。
直接上代码:
#!/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绩效的公司企业就另当别论了。
直接上代码:
#!/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
直接上代码:
#!/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语法可以自行试一下。感谢大家的支持,抽空再继续。
页面更新:2024-04-09
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号