shell脚本知识点10

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]# cat while-1.sh
#!/bin/bash
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]# cat while-2.sh
#!/bin/bash
#准备一个文件
>name.log
#进入循环
while true
do
    #生成一个1-99之间的随机数
    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
    #将输入的人员名称及对应的随机数追加到name.log文件中
    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]# cat for-1.sh
#!/bin/bash
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]# sh for-1.sh
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]# cat until-1.sh
#!/bin/bash
i=0
until [ $i -gt 9 ] 
do
    echo $i
    let i++
done


[root@db01 /service/scripts/day10]# cat until-2.sh
#!/bin/bash
i=9
until [ $i -lt 0 ]
do
    echo $i
    let i--
done

[root@db01 /service/scripts/day10]# cat until-3.sh
#!/bin/bash
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]# cat until-4.sh
#!/bin/bash
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]# cat until-5.sh
#!/bin/bash
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]# sh until-5.sh
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]# cat until-6.sh
#!/bin/bash
#准备一个文件
>name.log
#进入循环
until false
do
    #生成一个1-99之间的随机数
    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
    #将输入的人员名称及对应的随机数追加到name.log文件中
    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]# sh until-6.sh
请输入你的英文名称[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]# cat for-2.sh
#!/bin/bash
for i in {1..3} 
do
    echo "hello"
    exit
    echo "world"
done
echo "脚本执行结束!"
[root@db01 /service/scripts/day10]# sh for-2.sh
hello


2. break  结束当前循环,继续执行循环以外的命令 跳出这个循环  

[root@db01 /service/scripts/day10]# cat for-2.sh
#!/bin/bash
for i in {1..3} 
do
    echo "hello"
    break
    echo "world"
done
echo "脚本执行结束!"
[root@db01 /service/scripts/day10]# sh for-2.sh
hello
脚本执行结束!

3. continue  结束本次循环,不在执行本次循环以下的命令,继续执行下一次循环

[root@db01 /service/scripts/day10]# cat for-2.sh
#!/bin/bash
for i in {1..3} 
do
    echo "hello"
    continue
    echo "world"
done
echo "脚本执行结束!"
[root@db01 /service/scripts/day10]# sh for-2.sh
hello
hello
hello
脚本执行结束!

posted @   zbzSH  阅读(65)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示