Shell编程之流程控制循环和选择

文章详细介绍了Shell脚本中的case选择结构,展示了如何根据输入的成绩判断等级。接着,讲解了for和while循环的语法和用法,包括用for循环实现9*9乘法表以及使用while循环创建用户。案例实用,有助于理解Shell脚本控制流程的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

case选择结构

case的语法结构:

case 变量名 in
    值1)
        指令1
    ;;
    值2)
        指令2
    ;; 
    值3)
        指令3
    ;; 
    *)
        默认
esac

执行对应变量值后的指令,如果没有对应的值,则执行*)后的指令,遇到“;;”跳出case,执行esac后的语句。

实例1:判定一个成绩:80-100 -》 A,60-80 -》 B,0-60 -》C

shell脚本:

#!/bin/bash
#######################################
#File name:score.sh
#Version:1.0
#Email:katana23333@gmail.com
#Creat time:2023-02-02 19:31:05
#Description:
########################################
read -p "please input grade: " grade
case "$grade" in
    8[0-9]|9[0-9]|100)
        echo "You got A!"
    ;;
    6[0-9]|7[0-9])
        echo "You got B!"
    ;;
    [0-5][0-9])
        echo "You got C!"
    ;;
    *)
        echo "Please input vaild value"
esac

执行结果:

[root@KATANA 0131]# bash grade_level.sh 
please input grade: 99
You got A!
[root@KATANA 0131]# bash grade_level.sh 
please input grade: 65
You got B!
[root@KATANA 0131]# bash grade_level.sh 
please input grade: 58
You got C!
[root@KATANA 0131]# bash grade_level.sh 
please input grade: 110   
Please input vaild value
[root@KATANA 0131]# 

for循环结构

for循环的语法结构:

for variable in list
do
    statement1
    statement2
    ...
done

variable为循环变量,do和done之间为循环体,for循环次数与list中元素个数有关,循环结束后执行done后的语句。

while循环结构

while循环的语法结构

while expression
do
    statement1
    statement2
    ...
done

expression表示while循环体执行时需要满足的条件 ,do和done之间为循环体,当满足条件时执行循环,当条件不满足时跳出循环,执行done后的语句。

实例2:循环实现9*9乘法表

for循环:

for i in `seq 9`                            #外层循环,从1~9行
do                                          #
    for j in `seq $i`                       #内层循环,九九乘法表每行结尾乘数等于被乘数,从1~$i
    do                                      #
        echo -n " $i * $j = $((i*j)) "      #输出$i 与 $j 相乘的结果,-n不换行
    done                                    #
    echo ""                                 #每行结束后换行,外层循环中
done

执行结果:

[root@KATANA 0131]# vim multi_table.sh 
[root@KATANA 0131]# bash multi_table.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 

while循环:

j=1
i=1
while ((i<10))
do
    if ((j<=i))
    then
        printf "$i * $j = %2d " $((i*j))
        let j++
    else
        let i++
        echo ""
        j=1
    fi
done

执行结果:

*******************************************
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 
[root@KATANA 0131]# 

实例3:循环创建用户:用户名user1-user20

#!/bin/bash
#######################################
#File name:add_users.sh
#Version:1.0
#Email:katana23333@gmail.com
#Creat time:2023-02-02 20:59:04
#Description:
########################################
for i in `seq 20`
do
    useradd user$i
done

执行结果:

[root@KATANA 0131]# tail -20 /etc/passwd
user1:x:3460:3460::/home/user1:/bin/bash
user2:x:3461:3461::/home/user2:/bin/bash
user3:x:3462:3462::/home/user3:/bin/bash
user4:x:3463:3463::/home/user4:/bin/bash
user5:x:3464:3464::/home/user5:/bin/bash
user6:x:3465:3465::/home/user6:/bin/bash
user7:x:3466:3466::/home/user7:/bin/bash
user8:x:3467:3467::/home/user8:/bin/bash
user9:x:3468:3468::/home/user9:/bin/bash
user10:x:3469:3469::/home/user10:/bin/bash
user11:x:3470:3470::/home/user11:/bin/bash
user12:x:3471:3471::/home/user12:/bin/bash
user13:x:3472:3472::/home/user13:/bin/bash
user14:x:3473:3473::/home/user14:/bin/bash
user15:x:3474:3474::/home/user15:/bin/bash
user16:x:3475:3475::/home/user16:/bin/bash
user17:x:3476:3476::/home/user17:/bin/bash
user18:x:3477:3477::/home/user18:/bin/bash
user19:x:3478:3478::/home/user19:/bin/bash
user20:x:3479:3479::/home/user20:/bin/bash
[root@KATANA 0131]# 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值