一文教你学会 for循环 的嵌套模式:


 

        此链接通往 Bash Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:


1、for 循环 语法格式:

两个 for 循环的语法格式:

#!/bin/bash
for2((expression1;expression2;expression3))
do

    for1((expression1;expression2;expression3))
    do
    cmd1(这是 for1 的执行命令...)
    done
    
cmd2 (这是 for2 的执行命令..)
done


——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————


来看一下三个 或 三个以上 的for循环的语法结构:

#!/bin/bash
for3((expression1;expression2;expression3))
do

    for1((expression1;expression2;expression3))
    do
    cmd1(这是 for1 的执行命令...)
    done
    
         for2((expression1;expression2;expression3))
         do
         cmd2(这是 for2 的执行命令...)
         done
 
cmd3 (这是 for3 的执行命令..)
done

 

2、for循环嵌套的执行过程:

就直接拿 三个 for 循环的语法结构来举例:

root@zhengzelin:~# cat f.sh 
#!/bin/bash
for((i=1;i<=1;i++))
do 

  for((b=1;b<=2;b++))
  do 
  echo "666"
  done
  
    for((c=1;c<=3;c++))
    do
    echo "ccc"
    done
    
echo "ddd"
done

root@zhengzelin:~# ./f.sh 
666
666
ccc
ccc
ccc
ddd

# 现在对于 for嵌套的 执行过程顺序 明白了吧!先执行哪个for 再执行哪个for 懂了吧!

使用 bash -x 看的脚本执行的更加清楚:

root@zhengzelin:~# bash -x f.sh 
+ (( i=1 ))
+ (( i<=1 ))
+ (( b=1 ))
+ (( b<=2 ))
+ echo 666
666
+ (( b++ ))
+ (( b<=2 ))
+ echo 666
666
+ (( b++ ))
+ (( b<=2 ))
+ (( c=1 ))
+ (( c<=3 ))
+ echo ccc
ccc
+ (( c++ ))
+ (( c<=3 ))
+ echo ccc
ccc
+ (( c++ ))
+ (( c<=3 ))
+ echo ccc
ccc
+ (( c++ ))
+ (( c<=3 ))
+ echo ddd
ddd
+ (( i++ ))
+ (( i<=1 ))

 

3、利用for基础打印一个矩形:

第一步先打印 矩形的长:
root@zhengzelin:~# for((i=1;i<=1;i++));do echo "******";done
******

————————————————————————————————————————————————————————————————————————————————————————————

矩形的长出来了,然后打印矩形的宽 和 长:
root@zhengzelin:~# for((i=1;i<=2;i++));do echo "******";done
******
******


查看一下 这个命令的执行过程:
root@zhengzelin:~# bash -x f.sh 
+ (( i=1 ))
+ (( i<=2 ))
+ echo '******'
******
+ (( i++ ))
+ (( i<=2 ))
+ echo '******'
******
+ (( i++ ))
+ (( i<=2 ))

4、使用 for循环嵌套 打印矩形:

root@zhengzelin:~# for((i=1;i<=2;i++));do for((a=1;a<=7;a++));do echo -n "*";done; echo ;done
*******
*******

解释:

 
1、上面的嵌套for循环 你先给他拆开成两个单个的 for 循环!分开为:

①、for((i=1;i<=2;i++));do echo ; done  

和 

②、for((a=1;a<=7;a++));do echo -n "*" ; done

2、分别执行两个 for 循环命令,查看结果:

先执行 第一个 for循环语句:

root@zhengzelin:~# for((i=1;i<=2;i++));do echo ; done  


root@zhengzelin:~# 

发现上面输出了两个空行,为什么是2个空行呢?因为上面规定了 i 的取值范围是 1 - 2,然后循环,每次循环都 执行一次 echo ;
echo 命令 执行的话,默认会换行!

eg:
root@zhengzelin:~# echo

root@zhengzelin:~# 

再执行 第二个 for 循环语句:

root@zhengzelin:~# for((a=1;a<=7;a++));do echo -n "*" ; done
******* root@zhengzelin:~# 


# 发现输出的结果没有换行,这是为什么???

解释: 这是因为 echo -n 取消了echo命令自动换行 的功能!

——————————————————————————————————————————————————————————————————————————————————————

如果第二个for循环 取消 -n ;那么结果就是:每次打印一个* 就换一次行:
root@zhengzelin:~# for((a=1;a<=7;a++));do echo "*" ; done
*
*
*
*
*
*
*


那么再来看一下,for 嵌套取消 第二个for循环中 echo 的 -n 选项;看看输出结果是啥:
root@zhengzelin:~# for((i=1;i<=2;i++));do for((a=1;a<=7;a++));do echo  "*";done; echo ;done
*          
*
*
*
*
*
*      # 先执行 里面的for循环语句,这7个*就是输出结果!
       #再执行  外面 的for循环语句,这个空格 就是 echo命令 的输出结果!
*
*
*
*
*
*
*
      # 到此,循环结束!
root@zhengzelin:~# 

——————————————————————————————————————————————————————————————————————————————————————————————————————

加上 -n 选项:
root@zhengzelin:~# for((i=1;i<=2;i++));do for((a=1;a<=7;a++));do echo -n "*";done; echo ;done
*******
*******


执行 过程就是 :

1、执行 echo -n "*"  1-7 次,由于 echo -n 取消了换行功能,所以得到的结果就是: *******
2、然后 执行 echo 命令,因为 echo 执行结果是 换行(\n)! 所以:

结果就是: *******\n 

再次循环输出: *******\n*******\n

一共循环两次,循环完成退出循环!(嘴笨不知道如何表达,希望不会的人可以理解!)

所以说: n你知道为什么 第二个 for 循环里面要 使用 echo -n 来取消 echo 的自动换行功能 了吧!


 

上一篇:for 循环的基础篇:

下一篇:for 的进阶用法:三个for循环嵌套打印三角形!

发布了99 篇原创文章 · 获赞 72 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ljlfather/article/details/105279051