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]#