Shell-day10
1. 昨日回顾
1. while循环随机点名脚本
2. 猜数字脚本
3. 分发公钥脚本
4. 随机点菜系统脚本
5. 循环计算类的脚本
计算 1-100数字的和
计算0-100之间随机数的和 直到大于1000则结束
计算0-100之间随机数的和 直到大于1000结束,判断最后随机数是否被3进行整除
计算0-100之间能被3整除的数字的和 for循环实现
使用while实现
[root@db01 /service/scripts/day10]
i=0
while [ $i -le 100 ]
do
Sum=$(( $Sum + $i ))
i=$[$i+3]
done
echo $Sum
2. 抓阄脚本
1. 执行脚本时,输入学生的英文名字,产生1-99之间的数字,数字越大的就去参加。前面如果出现过这个数字,下次就不能在去出现。不能出现相同的数字
2. 输入完名称之后,屏幕上方输出你的名字和数字
3. 脚本是无限循环 要有退出的命令
4. 退出之后显示出数字最高的三位同学
[root@db01 /service/scripts/day10]
>name.log
while true
do
Ran=$(( $RANDOM % 99 + 1 ))
Repeat=$(grep -w $Ran name.log | wc -l)
if [ $Repeat -eq 1 ];then
echo "生成一个已经存在的随机数!重新生成!"
continue
fi
read -p "请输入你的英文名称[qls]:" Name
if [[ ! $Name =~ ^[a-Z]+$ ]];then
echo "你输入的英文名称不符合要求!"
continue
fi
Repeat_Name=$(grep -w $Name name.log | wc -l)
if [ $Repeat_Name -eq 1 ];then
echo "你已经输入过一次!每个人只有一次输入的机会!"
continue
fi
if [ $Name == "exit" ];then
echo "所有人已经输入完成!本次中奖的人员如下:"
break
fi
echo -e "姓名: $Name\t\t编号: $Ran " >>name.log
echo -e "姓名:$Name\t\t编号:$Ran "
done
sort -rnk4 name.log | head -3
3. 使用while循环打印九九乘法表
for
[root@db01 /service/scripts/day10]
for a in {1..9}
do
for b in $(seq 1 $a)
do
echo -en "${b}x$a=$(($a*$b))\t"
done
echo ""
done
[root@db01 /service/scripts/day10]
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
while
4. 循环语句之until循环概述
until在条件不成立时执行循环体,条件为真时,循环结束
until [ 条件表达式 ]
do
done
[root@db01 /service/scripts/day10]
i=0
until [ $i -gt 9 ]
do
echo $i
let i++
done
[root@db01 /service/scripts/day10]
i=9
until [ $i -lt 0 ]
do
echo $i
let i--
done
[root@db01 /service/scripts/day10]
a=0
b=9
until [ $a -gt 9 ]
do
echo $a + $b = $(($a+$b))
let a++
let b--
done
5. 使用until循环读入文件
[root@db01 /service/scripts/day10]
if [ $USER != "root" -o $UID -ne 0 ];then
echo "用户${USER}没有权限执行脚本!"
exit
fi
until ! read line
do
id $line &>/dev/null
if [ $? -eq 0 ];then
echo "用户${line}已经存在!"
else
useradd $line &>/dev/null
if [ $? -eq 0 ];then
echo "用户${line}创建成功!"
else
echo "用户${line}创建失败!"
fi
fi
done < user.txt
6. 使用until循环打印九九乘法表
[root@db01 /service/scripts/day10]
a=1
until [ $a -gt 9 ]
do
b=1
until [ $b -gt $a ]
do
echo -en "${b}x$a=$(($a*$b))\t"
let b++
done
echo ""
let a++
done
[root@db01 /service/scripts/day10]
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
7. 使用until循环编写抓阄脚本
[root@db01 /service/scripts/day10]
>name.log
until false
do
Ran=$(( $RANDOM % 99 + 1 ))
Repeat=$(grep -w $Ran name.log | wc -l)
if [ $Repeat -eq 1 ];then
echo "生成一个已经存在的随机数!重新生成!"
continue
fi
read -p "请输入你的英文名称[qls]:" Name
if [[ ! $Name =~ ^[a-Z]+$ ]];then
echo "你输入的英文名称不符合要求!"
continue
fi
Repeat_Name=$(grep -w $Name name.log | wc -l)
if [ $Repeat_Name -eq 1 ];then
echo "你已经输入过一次!每个人只有一次输入的机会!"
continue
fi
if [ $Name == "exit" ];then
echo "所有人已经输入完成!本次中奖的人员如下:"
break
fi
echo -e "姓名: $Name\t\t编号: $Ran " >>name.log
echo -e "姓名:$Name\t\t编号:$Ran "
done
sort -rnk4 name.log | head -3
[root@db01 /service/scripts/day10]
请输入你的英文名称[qls]:a
姓名:a 编号:24
请输入你的英文名称[qls]:b
姓名:b 编号:12
请输入你的英文名称[qls]:c
姓名:c 编号:50
请输入你的英文名称[qls]:d
姓名:d 编号:56
请输入你的英文名称[qls]:e
姓名:e 编号:86
请输入你的英文名称[qls]:f
姓名:f 编号:73
请输入你的英文名称[qls]:g
姓名:g 编号:14
请输入你的英文名称[qls]:a
你已经输入过一次!每个人只有一次输入的机会!
生成一个已经存在的随机数!重新生成!
请输入你的英文名称[qls]:exit
所有人已经输入完成!本次中奖的人员如下:
姓名: e 编号: 86
姓名: f 编号: 73
姓名: d 编号: 56
8. 内置跳出循环的指令
exit break continue
1. exit 退出整个脚本程序
[root@db01 /service/scripts/day10]
for i in {1..3}
do
echo "hello"
exit
echo "world"
done
echo "脚本执行结束!"
[root@db01 /service/scripts/day10]
hello
2. break 结束当前循环,继续执行循环以外的命令 跳出这个循环
[root@db01 /service/scripts/day10]
for i in {1..3}
do
echo "hello"
break
echo "world"
done
echo "脚本执行结束!"
[root@db01 /service/scripts/day10]
hello
脚本执行结束!
3. continue 结束本次循环,不在执行本次循环以下的命令,继续执行下一次循环
[root@db01 /service/scripts/day10]
for i in {1..3}
do
echo "hello"
continue
echo "world"
done
echo "脚本执行结束!"
[root@db01 /service/scripts/day10]
hello
hello
hello
脚本执行结束!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现