shell编程之八(循环嵌套-与循环控制符–以及交互式菜单select结构)

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

利用循环嵌套编写的九九乘法表

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


#在这里无法展示效果,可以参考棋盘的样子,一个白一个黑

循环控制符(linux的shell编程中,有时需要立即从循环中退出)
break #如果是退出循环可以使用它
continue #退出本次循环,执行后续循环

break循环的两个例子

for (( i=1; i<=9; i++  ))
do
    for (( j=1; j<=i; j++  ))
    do
        let "he=i*j"
        if [ "$he" -eq 7 ];then
            break
        fi
        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    

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
for (( i=1; i<=9; i++  ))
do
    if [ "$i" -eq 7 ];then
        break
    fi

    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

continue例子

for (( i=1; i<=9; i++  ))
do

    for (( j=1; j<=i; j++  ))
    do
        let "he=i*j"
        if [ "$he" -eq 7 ];then
            continue
        fi
        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*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 

select结构(用于交互式菜单,它比case多了交互性)

select variable in {list}
do
    command
    ........
    break
done

例子:设计一个交互式菜单

echo "请输入一个颜色单词"
select color in "red" "black" "green" "white" "blue"
do
    break
done
echo "你输入的颜色是$color"

[root@localhost ~]# sh ceshi.sh 
请输入一个颜色单词
1) red
2) black
3) green
4) white
5) blue
#? 3
你输入的颜色是green
[root@localhost ~]# 
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/331.html
微信打赏微信打赏

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

最后编辑于:2020/2/19作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何?

暂无评论

发表评论

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