shell编程之六(for循环,for循环嵌套嵌套)

shell的三种循环及循环控制符

#shell的三种循环
    for循环,while循环,until循环

#shell的循环控制符
    break,continue

#for循环的三种结构
    列表
    不带列表
    类C风格

简单的单行for循环

root@ser552965470679:~# for fruit in apple orange banana; do echo $fruit; done
apple
orange
banana

列表for循环

(do和done之间的叫着循环体)

for variable in {list}
  do
    command1
    command2
  done

#使用列表for循环显示5次欢迎(这里的1,2,3,4,5可以是数字,也可以是字符串,但是得用空格分开)
for variable in 1 2 3 4 5   #也可以使用省略的计数方式,这样写 for variable in {1..5}
  do
    echo "欢迎 $variable"
  done

shell中还支持按一定的步数进行跳跃式实现列表for

for variable in {1..100..2} #计算1到100所有奇数之和,也可以这样写 for variable $( seq 1 2 100 )
  do
    let "a+=variable"
  done
echo "$a"

使用列表for循环显示当前目录下的文件,将ls命令的结果列表赋值给file

for file in $( ls )
  do
    echo "file : $file"
  done

[root@localhost ~]# sh ceshi.sh 
file : 1
file : 4564
file : 56
file : anaconda-ks.cfg
file : asd
file : ceshi.sh
file : ss

使用列表for循环显示所有的输入参数

echo "共输入了$#个参数"
for canshu in "$*"
  do
    echo "$canshu"
  done

不带列表的for循环

(默认会将脚本输入的参数,按列表传给for循环)(使用较少)

for variable        #等价于    for variable "$@"
  do
    command
  done

类C风格的for循环

(也叫着计次循环,一般用于循环次数已知的情况)

for (( expr1; expr2; expr3 ))   
#其中表达式expr1为循环变量赋初值的语句
#表达式expr2,决定是否进行循环的表达式,当判断expr2的退出状态为0时,执行do和done之间的循环体
#表达式expr3,是用于改变循环变量的语句
  do
    command
  done

例子1

使用类C风格的for循环计算1到100的奇数之和
for (( i=1; i<=100; i=i+2 ))
  do
    let "a+=i"
  done
echo "$a"

例子2

LIN=5
for (( a=1,b=9; a<=LIN; a++,b-- ))
  do
    let "temp=a-b"
    echo "$a-$b=$temp"
  done

注意:下面全部省略表达式也是合法的

for (( ; ; ))
  do
    command
  done

for循环嵌套(在一个循环体内包含其他循环)

嵌套循环示例一:

#!/bin/bash

outer=1             # 设置外部循环计数.

# 开始外部循环.
for a in 1 2 3 4 5
do
  echo "Pass $outer in outer loop."
  echo "---------------------"
  inner=1           # 重置内部循环计数.

  # ===============================================
  # 开始内部循环.
  for b in 1 2 3 4 5
  do
    echo "Pass $inner in inner loop."
    let "inner+=1"  # 增加内部循环计数.
  done
  # 内部循环结束.
  # ===============================================

  let "outer+=1"    # 增加外部循环的计数.
  echo              # 每次外部循环之间的间隔.
done               
# 外部循环结束.
exit 0

嵌套循环示例二:实现九九乘法表

for (( i=1; i<=9; i++  ))
do
    for (( j=1; j<=i; j++  ))
    do
        let "he=i*j"
        echo -n "$i*$j=$he    "
    done

    echo  ""
done

[root@localhost ~]# sh ceshi.sh 
1*1=1    
2*1=2    2*2=4    
3*1=3    3*2=6    3*3=9    
4*1=4    4*2=8    4*3=12    4*4=16    
5*1=5    5*2=10    5*3=15    5*4=20    5*5=25    
6*1=6    6*2=12    6*3=18    6*4=24    6*5=30    6*6=36    
7*1=7    7*2=14    7*3=21    7*4=28    7*5=35    7*6=42    7*7=49    
8*1=8    8*2=16    8*3=24    8*4=32    8*5=40    8*6=48    8*7=56    8*8=64    
9*1=9    9*2=18    9*3=27    9*4=36    9*5=45    9*6=54    9*7=63    9*8=72    9*9=81

嵌套循环示例三:实现8*8的围棋棋盘

for (( i=1; i<=9; i++  ))
do
    for (( j=1; j<=8; j++  ))
    do
        let "x=i+j"
        let "tmp=x%2"
        if [ "$tmp -eq 0" ];then
            echo -ne "\033[47m"
        else
            echo -ne "\033[40m"
        fi
    done
    echo ""

done

#在这里无法展示效果,可以参考棋盘的样子,一个白一个黑
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/514.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/5/17作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录