shell脚本编程举例--for、while循环

    Linux的Shell种类众多,常见的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell语言的语法有所不同,所以不能交换使用。每种Shell都有其特色之处,基本上,掌握其中任何一种 就足够了。在本文中,我们使用的shell是Bash,也就是Bourne Again Shell。

首先简单介绍一下while的用法:
while COMMANDS; do COMMANDS; done
COMMANDS是命令构成的条件(一般是条件测试语句),当命令执行结果正确时,执行循环;当命令执行结果错误时,退出循环。
然后介绍一下for的用法:
for NAME [in WORDS ... ] ; do COMMANDS; done
NAME是变量名,不是变量;
[in WORDS ... ] 是参数列表,也就是NAME的取值列表,该列表可直接给出,也可采用命令生成:
for i in {1..10}参数列表为1 2 3 4 5 6 7 8 9 10 
for i in seq 10参数列表为1 2 3 4 5 6 7 8 9 10 

这里写图片描述

shell脚本编程举例--for、while循环_第1张图片

 下面将举两个小例子:

1 打印国际象棋棋盘

shell脚本编程举例--for、while循环_第2张图片

思路一

    设横坐标为变量i,纵坐标为变量j,第一个格的坐标为(1,1),观察棋盘可发现(为便于在secureCRT上区分输出结果,使用红色和黄色):
(1,1):红色
(1,2):黄色
(2,1):黄色
(2,2):红色
即i+j为偶数时,格子颜色为红色;i+j为奇数时,格子颜色为黄色,可据此规律编写代码如下:

shell脚本编程举例--for、while循环_第3张图片

该代码实现了打印8行8列的国际象棋棋盘:
变量i是行数,取值范围是0...7,控制外层循环的循环次数;
变量j是行数,取值范围是0...7,控制内层循环的循环次数;
变量flag是颜色变换的标志:
当i+j为偶数,即$[$[i+j]%2]等于0(i+j对2求余为0)时,flag为0,打印红色,打印完不换行;
当i+j为奇数,即$[$[i+j]%2]不等于0(i+j对2求余不为0)时,flag不为0,打印黄色,打印完不换行,打印完一行,即内层循环执行一遍时再换行。
代码执行结果如下图:

shell脚本编程举例--for、while循环_第4张图片

echo -ne "\033[44m  \033[0m"
echo的-e选项表示启用反斜线\的解释功能,-n选项表示取消默认的换行,\033是颜色启用标志,[41m表示设置背景颜色为红色,当数值为41-47时,表示设置背景颜色,当数值为31-37时,表示设置字体颜色。

思路二:

   共8行,两行为一大组,做4个大组循环,每个大组分成两个小组(一行为一个小组),第一小组是先红后黄(即第一个小格为红色,第二个小格为黄色),每打印完一个小格时不换行,直到打印完一个小组;第二小组是先黄后红。代码如下:

shell脚本编程举例--for、while循环_第5张图片

执行结果如下:

shell脚本编程举例--for、while循环_第6张图片
2 打印等腰三角形

设总行数为变量linesum,行号为变量i,星星个数为变量star,空格个数为space。

这里写图片描述

如图所示,当linesum=4时,
i=1,star=1,space=3
i=2,star=3,space=2
i=3,star=5,space=1
i=4,star=7,space=0
即
star与i、linesum的关系是star=2*i-1
space与i、linesum的关系是space=linesum-i

shell脚本编程举例--for、while循环_第7张图片

首先判断参数个数是否为0,若为0,则在屏幕上打印“Please input the lines: ”,提示用户输入,将用户输入赋给变量lines;若不为0,则将位置变量$1的值赋给变量lines。然后判断lines是否为非0数字,若是,则开始进行打印处理;若不是,则报错并退出。
进行打印处理时,外层循环控制总行数:内层的第一个循环打印空格,每打印完一个空格时不换行;第二个循环打印星星,每打印完一个星星时不换行,直到两个内层循环执行完毕即打印完一行之后再换行。
seq $ lines表示产生1至$lines的数字序列,当lines为6时,seq $lines的执行结果为1 2 3 4 5 6;
echo 加 -n选项时将会去掉默认的换行符。
执行结果如下图所示:
(1)未输入参数,在屏幕上打印“Please input the lines: ”,提示用户输入,将用户输入赋给变量lines。

shell脚本编程举例--for、while循环_第8张图片

(2)输入了参数,值为8,将该值传递给位置变量$1,将位置变量$1的值赋给变量lines。

shell脚本编程举例--for、while循环_第9张图片

(3)输入值错误,报错并退出。

这里写图片描述

你可能感兴趣的:(运维,shell-脚本)