Shell的双重循环

Posted Richard_Chiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell的双重循环相关的知识,希望对你有一定的参考价值。

Shell的双重循环

双重循环

即在一个for循环内部再加上一个for循环

for ((变量=X; 指定变量范围; 指定变量迭代的方式))#定义外循环
do
  for ((变量=X; 指定变量范围; 指定变量迭代的方式))#定义内循环
  do
  命令序列
  指定变量迭代的方式
  done
  命令序列
done
例:
#!/bin/bash
for ((a=1; a<=5; a++))
do
  echo "外部循环 $a"
  for ((b=1; b<=5; b++))
  do
    echo "    内部命令 $b"
  done
done


exit  用于退出脚本进程

break [n]  用于跳出单(n代表多少层)层循环

continue 用于中止某次循环中的操作,但是不会完全终止整个循环命令

break

使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。

  • 跳出当前循环
  • 并且break下面的语句不去执行
例:
#!/bin/bash
for ((a=1; a<=5; a++))
do
  echo "外部循环 $a"
  for ((b=1; b<=5; b++))
  do
    if [ $b -eq 3 ]
    then
    break
    fi
    echo "    内部命令 $b"
  done
  echo ""
done

#!/bin/bash
for ((a=1; a<=5; a++))
do
  echo "外部循环 $a"
  for ((b=1; b<=5; b++))
  do
    echo "    内部命令 $b"
    if [ $b -eq 3 ]
    then
    break
    fi
  done
  echo ""
done


continue

在内循环中执行continue 剩余的语句而强制执行下一次循环,其作用为结束本次循环

  • 即跳过循环体中下面尚未执行的语句
  • 接着进行下一次是否执行循环的判定。
例:
#!/bin/bash
for ((a=1; a<=5; a++))
do
  echo "外部循环 $a"
  for ((b=1; b<=5; b++))
  do
    if [ $b -eq 3 ]
    then
    continue
    fi
    echo "    内部命令 $b"
  done
done


双重循环示例:

①.直角三角形的四种示例
#!/bin/bash
echo "直角三角形1"
for ((a=1;a<=9;a++)) #先定义外循环也就是三角形的高
do
  for ((b=1;b<=a;b++)) #此为内循环我们定义三角形的每一行行数
  do
  echo -n "*"   #用"*"来填充,从而打印出三角形;此间因为"-n"所以不换行输出
  done
echo ""   #空格自动进行换行
done
#!/bin/bash
echo "直角三角形2"
for ((a=1;a<=9;a++)) #同样的,先定义外循环也就是三角形的高
do
  for ((b=9;b>=a;b--)) #此为内循环我们定义三角形的每一行行数
  do
  echo -n " "    #因为我们打印的是反向的三角形所以我们理解成拼凑出一个长方形然后一半用空白填充
  done
  for ((c=1;c<=a;c++)) #此为内循环我们定义三角形的每一行行数
  do
  echo -n "*"    #用"*"来填充,从而打印出三角形;此间因为"-n"所以不换行输出
  done
echo ""
done
#!/bin/bash
echo "倒直角三角形1"
for ((a=1;a<=9;a++))
do
  for ((b=1;b<=a;b++))
  do
  echo -n " "
  done
  for ((c=9;c>=a;c--))
  do
  echo -n "*"
  done
echo ""
done
#!/bin/bash
echo "倒直角三角形2"
for ((a=9;a>=1;a--))
do
  for ((b=1;b<=a;b++))
  do
  echo -n "*"  
  done
echo " "
done

②.打印出菱形
#!/bin/bash
#等腰三角形
for ((a=1; a<=9; a++))
 do
for ((b=9; b>=a; b--))
do
echo -n " "
done
i=$[($a*2)-1]
for j in $(seq 1 $i)
#for((j=1; j<=i; j++))
do
echo -n "*"
done
echo ""
done
等腰三角形的两种写法,此刻两个等腰三角形相结合拼凑出一个菱形,注意上下的等腰三角形不是一样的边长
for ((a=2; a<=9; a++))
 do
for ((b=1; b<=a; b++))
do
echo -n " "
done
for ((c=9;c>=a;c--))
do
echo -n "*"
done
for ((d=8;d>=a;d--))
do
echo -n "*"
done
echo ""
done

③.99乘法表的两种写法
#!/bin/bash
for ((a=1; a<=9; a++ ))
do
  for (( b=1; b<=a; b++ ))
  do
  sum=$[$a * $b]
  let sum=$a*$b
  echo -n -e "$a*$b=$sum\\t"
  done
  echo ""
done

#while的写法
a=1
while [ $a -le 9 ]
  do
  b=1
  while [ $b -le $a ] && [ $b -ge 1 ]
  do
  sum=$[$a*$b]
  echo -ne "$a*$b=$sum\\t"
  let b++
done
 let a++
  echo ""
done


补充:打印五角星
#!/bin/bash
#最上方的三角形部分
for ((i=0; i<10; i++))

    for ((j=1; j<20; j++))
    
        echo -n " "
    
    for ((j=10; j>i; j--))
    
        echo -n " "
    
    for ((j=0; j<i*2+1; j++))
    
        echo -n "*"
    
    echo  ""

#倒梯形部分
for ((i=0; i<6; i++))

    for ((j=0; j<i*3; j++))
    
        echo -n "."
    
    for ((j=60; j>i*6; j--))
    
        echo -n "*"
    
    echo  ""

#正梯形部分
for ((i=0; i<5; i++))

    for ((j=17; j>i; j--))
    
        echo -n "."
    

    for ((j=0; j<25+i*2; j++))
    
        echo -n "*"
    
    echo  ""

#最下面的双三角形部分
for ((i=1; i<=5; i++))

    for ((j=12; j>=i; j--))
    
        echo -n "."
    
    for ((j=15; j>=i*3; j--))
    
        echo -n "*"
    
    for ((j=0; j<=i*8; j++))
    
        echo -n "."
    
    for ((j=15; j>=i*3; j--))
    
        echo -n "*"
    
    echo  ""


以上是关于Shell的双重循环的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本之双重循环(补充)

Shell脚本之双重循环

入门经典 九九乘法表 双重循环之shell脚本

常用python日期日志获取内容循环的代码片段

shell if 语句

shell 四之forwhileuntil 循环语句