shell循环与结构化命令

for循环有三种格式,第一种是列表for循环,一种是不带列表的for循环,第三种是类似C语言风格的for循环。

列表for循环

例如:新建脚本for.sh,脚本内容如下:

上图中的do done之间的内容称为循环体,一共执行了5次,打印5个结果。

列表for循环中也支持略写的方式,将1到5的数字略写,如图:

shell中还支持按照一定的数值递增的方式进行循环,计算1到100之间所有奇数的和,如图:var的值每次递增初始为1,每次加2

使用seq命令同样可以实现按照一定数值递增的方式循环,如图:

for循环也可以对字符串进行操作,如图:

通过for循环显示指定目录下的所有文件,如图:

for 循环可以接受从命令行传递参数,$#表示参数个数,$*表示所有参数,执行的时候,sh for.sh 1 2 3 4 5即可,例如:

不带列表for循环

不带列表for循环同样通过命令行来传递参数,sh for.sh 1 2 3如图:

类似C语言风格的for循环

类似C语言风格的for循环也被成为计次循环,一般用于已知次数的循环,例如:如果满足i<=5,那么继续执行循环体,否则退出。

通过c风格的for循环,计算1到100之间的奇数的和,如图:

可以通过逗号运算符同时对两个变量进行操作,如图:

if循环

1、下面的if循环来判断文件后缀名,如图:

注:获取后缀名的方式是${a##*.},a表示源文件

while循环

while循环主要判断while后面的表达式是否成立,如果成立,则执行循环体,否则退出

while循环分为四种形式,分别说明如下:

第一种:计数器控制的while循环

使用计数器控制,用于显示数字1到5.如图:

通过计数器计算1到100之间奇数的和,如图:

第二种:结束标记控制的while循环

使用结束标记控制的while循环实现猜测1-10之间的数,通过read读取输入数字,中间又加了一个判断,如果大于10则报错并退出,如图:

注意:while与[]之间有空格

第三种:标志控制的for循环

使用标志控制的for循环实现猜测1-10之间数字,如图:

第四种:命令行控制的while循环

在此模式下,while循环通常需要与shift一起使用,shift使位置变量下移一位($2代替$1,$3代替$2), 加了shift后,下一轮循环将打印$2,以此类推,如图:

while循环读取文件内容并输出到另一文件,如图:

until循环

until循环与while循环类似,但是有一点区别就是,只有当表达式退出状态不为0的时候,循环体执行,如果表达式退出状态为0,循环结束

通过until同样可以实现猜测1-10之间的数字,如图:

嵌套循环

使用两个for循环嵌套实现九九乘法表,最后的echo “”表示换行输出,如图:

for循环、while都支持嵌套循环,可根据实际情况嵌套使用。

循环控制符

在执行循环过程中,如果需要立即退出,可以通过break控制符,如果退出当前循环后继续循环,那么使用continue控制符

break循环控制符可以用于for循环、while循环以及until循环中,用于强行退出循环,忽略循环语句中其他条件限制。

例如:计算1-100之间数的和,当总和大于1000的时候,停止循环,并打印总和,如图:

continue循环控制符也可以用于for循环 、while循环以及until循环中,用于让脚本跳过后面的循环,继续执行下一次循环。

例如:通过continue实现打印100以内能被7整除的数,如图:

循环占位符

占位符的意思就是占着位置,但是什么也不做

1、下面例子表示一个if循环,如图:

上图中 if 和 elif 条件都不满足,因此只能执行else,如图:

此时,如果我们不想让else中的内容执行,要else,但是什么也不执行,此时可以将内容替换为true或者冒号来占位,如图:

标签