shell循环嵌套使用方法 | 学习笔记

简介: 快速学习shell循环嵌套使用方法。

开发者学堂课程【Shell 编程入门到精通shell循环嵌套使用方法】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/453/detail/5598


shell循环嵌套使用方法

 

一、循环语句的嵌套

嵌套就比如一个for语句里面多个for语句,双重循环。

1、案例1 :打印直角三角形

使用特殊符号打印三角形。要求整个程序要有交互,运行时可以自动输入打印的行数和用于描绘三角形的特殊符号。

从Please Enter the line number:输入打印行数值5,Please Enter the line number:输入要打印的字符*,执行结果如下:

*

**

***

****

*****

思路分析:可以echo一个文件,如echo “aaaa“,read line得到一个行数。

vim 创建 sanjiao.sh,打印一个三角形,首先echo实现交互,获得*,但因为*比较特殊,是通配符,所以要打印*需要加上$char”,再echo输出,使用$Line$char来查看有没有得到值,如,

[ root@xuegod63 test] # vim sanjao. sh

echo "Please Enter the line number:

read Line

echo $Line

echo "Please Enter the char number:

read char

echo $char

[ root@xuegod63 test] #./sanjao. sh

Please Enter the line number:

5

5

Please Enter the char number:

*

*

使输出内容不换行:

方法一,echo后加-n,如,

[ root@xuegod63 test] # vim sanjao. sh

echo -n "Please Enter the line number:

read Line

echo $Line

echo -n "Please Enter the char number:

read char

echo $char

[ root@xuegod63 test] #./sanjao. sh

Please Enter the line number:5

5

Please Enter the char number:*

*或

[ root@xuegod63 test] #echo -n aaa

[ root@xuegod63 test] #echo -n aaa

aaa [ root@xuegod63 test]#

方法二:

echo * #此命令中* 表示匹配当前目录下所有文件名。echo “*“,通过read可以有交互的接收键盘上输入的值存到变量里面,接收时的提示符为-p,如,
[ root@xuegod63 test] # vim sanjao. sh

#!/bin/sh

read -p "Please Enter the line number:" Line

eqho $Line

read -p "Please Enter the char number:" char 

[ root@xuegod63 test] #./sanjao. sh

Please Enter the line number:5

5

Please Enter the char number:

*

*

以上已经实现了运行时可以自动输入打印的行数和用于描绘三角形的特殊符号,接下来实现输出三角形形式的效果思路:

双重循环

外层:控制行数.

内层:控制每行输出的*的个数

观察图像发现符号输出为,第一行一个,第二行二个,第三行三个第五行五个。规律:每行输出的*数等于行号

找到规律后先定义一个参数a,while让$a小于等于行数$Line,比如行数$Line为5,则输出5行,do满足时定义一个变量b=1,再while$b小于等于$a,然后开始执行输出,输出-n $char,$char要加““,如”$char“,对b做赋值为$b+1为2,满足条件一直while循环, done结束,输出*后echo换行,最后a也要做赋值,增加到大于行号停止,再次done结束,保存退出,如,

[ root@xuegod63 test] # vim sanjao. sh

#!/bin/sh

read -p "Please Enter the line number:" Line

read -p "Please Enter the char number:”char

a=1

while [ $a -le $Line ]

do

b=1

while[$b-le $a]

do

echo -n “$char”

b='expr$b+1

done

echo

a='expr $a+1

done

[ root@xuegod63 test] # ./sanjao. sh

Please Enter the l ine number:3

Please Enter the char number:*

*

**

***

如果上述脚本echo后没有-n不换行,则输出为,

[ root@xuegod63 test]# . /sanjao.sh

Please Enter the line number:3

Please Enter the char number:*

*

*

*

*

*

*

如果外循环没有echo,执行脚本,则输出为,

[ root@xuegod63 test]# . /sanjao.sh

Please Enter the line number:3

Please Enter the char number:*

******[ root@xuegod63 test]#

此处外层循环执行一次里层循环执行$a次,可以把变量换成具体数值进行验证。

2、案例2 :打印倒三角形

打印以下倒三角形,分析a要等于3,a做自减一,$a 仍然小于$Line

***

**

*

3、案例3 :打印正三角形

想要输出以下图形:

*

***

*****

方法1:使用echo直接输出,*要加““括起来。

[ root@xuegod63 test]# vim zhengsj.sh

#!/bin/sh

echo “*”

echo “***”

echo “*****”

[ root@xuegod63 test]# . /zhengsj.sh

*

***

*****

方法2:cat<<EOF输入重定向,EOF结尾标志符,也可用其他的,如,

[ root@xuegod63 test]#cat>>EOF

>    *

>   ***

>  *****

>E0F

*

***

*****

方法3 : 代码实现方法

*

***

*****

分析:

1外层控制输出几行

2内层循环(1) :每行输出空格的个数

内层循环(2):每行输出的*的个数

3、内层循环1 :每行输出空格的个数

#指定每一行输出的空格数。第行需要输出2个空格第二行需要输出1个第三行输出0个空格。得出结论,空格数等于:总行数Line-当前行号。

read -p获取行号,外层循环for使用行号控制一个循环的次数,此处for做一个加深,i=1初始值,i小于等于Line,执行完后i++,这种写法类似于c语言的写法,do中的for执行输出空格数,第一行两个,第二行一个得出,空格数等于总行数line减去当前行,定义一个j,j等于$Line-$i,,当i等于1的时候说明第一次循环在第一行,这是初始值,当i等于2时,i等于2时大于0,执行j--,输出echo -n,单引号里面要加空格,执行到j减为1。

内层循环2 :每行输出的*的个数

#第一行一个*,第二行两个*,第三个5个*。每行的*数应该等于当前行号x2-1

当h=1时,h++,直到h不小于x2-1结束,再执行echo输出*,输出时要加-n表示不换行输出,如,

[ root@xuegod63 test]#vim zhengsj -v3.sh#!/bin/sh

read -p "Please Enter a number:" Line#获取号行

for ((i=1; i<=Line; i++)) #使用行号来控制一共循环的次数

do

for ((j=$Line-$i; j>0;j--));#指定每一行输出的空格数。第一行需要输出2个空格,第二行需要输出1个,第三行输出0个空格。得出结论,空格数等于:总行数Line-当前行号

do

echo -n

done

for ((h=1; h<=$(2*$i-1)); h++))#第一行一个*,第二行两个*,第三个5个*。每个*>数等于:当前行号x2-1

do

echo -n ‘*’  #输出内容时,不换行

done

echo

done

[ root@xuegod63 test]#./zhengsj -v3.shPlease Enter a number:5

*

***

*****

*******

*********

相关文章
|
8月前
|
Shell Linux C++
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
123 0
|
SQL 存储 NoSQL
Kudu 整合 impala-shell 操作 | 学习笔记
快速学习 Kudu 整合 impala-shell 操作
664 0
Kudu 整合 impala-shell 操作 | 学习笔记
|
4月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
4月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
4月前
|
存储 Java Shell
shell学习笔记(详细整理)
这篇文章是一份详细的Shell学习笔记,涵盖了Shell的基础知识、脚本编写、变量、运算符、条件判断、流程控制、函数以及常用Shell工具的使用。
84 1
|
8月前
|
Java Shell Linux
Shell编程 学习笔记
Shell编程 学习笔记
101 1
|
8月前
|
Shell
shell系统给定变量大全——及使用方法
shell系统给定变量大全——及使用方法
65 0
|
Shell Linux Perl
shell 学习笔记
shell 学习笔记
84 1
|
Shell BI PHP
shell中的各种括号的使用方法
shell中的各种括号的使用方法
103 0
|
Shell 开发工具 git
Shell别名的使用方法及管理技巧
Shell别名的使用方法及管理技巧
114 0