shell脚本——八个循环实验(使用while循环)

464 阅读3分钟

实验一

实验要求:计算从1到100所有整数的和。

创建脚本:

 [root@localhost ~]# vim w01.sh
 #!/bin/bash
 # 计算从1到100之间所有整数的和。
 ​
 sum=0
 i=1
 ​
 while [ $i -le 100 ]
 do
    sum=$[sum+i]
    let i++
 done
 echo "1-100之间所有整数和是:$sum"
 ​
 [root@localhost ~]# bash w01.sh
 1-100之间所有整数和是:5050

实验1-1.png

实验1-2.png

实验二

实验要求:提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和。

创建脚本:

 [root@localhost ~]# vim w02.sh
 #!/bin/bash
 # 提示用户输入一个小于100的整数,并计算从1到该数>之间所有整数的和。
 ​
 read -p "请输入一个整数(1-100):" a
 ​
 sum=0
 i=1
 while [ $i -le $a ]
 do
    let sum=$[sum+i]
    let i++
 done
 echo "求和的结果是 $sum"

实验2-1.png

执行脚本:

 [root@localhost ~]# bash w02.sh
 请输入一个整数(1-100):50
 求和的结果是 1275
 [root@localhost ~]# bash w02.sh
 请输入一个整数(1-100):100
 求和的结果是 5050
 [root@localhost ~]# bash w02.sh
 请输入一个整数(1-100):10
 求和的结果是 55

实验2-2.png

实验三

实验要求:求从1到100所有整数的偶数和、奇数和。

创建脚本并执行:

 [root@localhost ~]# vim w03.sh
 #!/bin/bash
 # 求从1到100所有整数的偶数和、奇数和。
 ​
 sum1=0
 sum2=0
 i=1
 ​
 while [ $i -le 100 ]
 do
    a=$[$i%2]
    if [ $a -eq 0 ]
    then
        let sum1=${sum1}+$i
    else
        let sum2=${sum2}+$i
    fi
    let i++
 done
 echo "1-100之间所有整数的偶数和是 ${sum1}"
 echo "1-100之间所有整数的奇数和是 ${sum2}"
 ​
 [root@localhost ~]# bash w03.sh
 1-100之间所有整数的偶数和是 2550
 1-100之间所有整数的奇数和是 2500

实验3-1.png

实验3-2.png

实验四

实验要求:用户名存放在users.txt文件中,每行一个,判断文件里的用户是否存在,若该用户存在,输出提示该用户已存在;若该用户不存在,建立用户并设立初始密码“123456”。

创建脚本:

 [root@localhost ~]# cat users1.txt
 u01
 lisi
 jack
 wangwu
 ​
 [root@localhost ~]# vim w04.sh
 #!/bin/bash
 # 用户名存放在users1.txt文件中,每行一个.
 # 判断文件里的用户是否存在,若该用户存在,输出提示该用>户已存在;
 # 若该用户不存在,建立用户并设立初始密码“123456”。
 ​
 cat /root/users1.txt |while read user
 do
     if id $user &>/dev/null
     then
         echo "用户 $user 已存在!"
     else
         echo "正在创建用户 $user......"
         useradd $user
         echo "123456" | passwd --stdin $user
     fi
 done

实验4-1.png

实验4-2.png

执行脚本:

 [root@localhost ~]# bash w04.sh
 用户 u01 已存在!
 用户 lisi 已存在!
 正在创建用户 jack......
 更改用户 jack 的密码 。
 passwd:所有的身份验证令牌已经成功更新。
 正在创建用户 wangwu......
 更改用户 wangwu 的密码 。
 passwd:所有的身份验证令牌已经成功更新。

实验4-3.png

实验五

实验要求:检测指定范围主机是否通信,并将通信的主机ip输出到文件up_ip中,将不能通信的主机ip输出到文件down_ip中。

创建脚本:

 [root@localhost ~]# vim w05.sh
 #!/bin/bash
 #检测指定范围主机是否通信,并将通信的主机ip输出到文件up_ip中,将不能通信的主机ip输出到文件down_ip中。
 ​
 a="192.168.72."
 i=1
 ​
 while [ $i -le 10 ]
 do
 {
    ping -c 3 -w 2 $a$i &>/dev/null
    if [ $? -eq 0 ]
    then
        echo "$a$i is up" >> /data/up_ip
    else
        echo "$a$i is down" >> /data/down_ip
    fi
 }&
    let i++
 done
 cat /data/up_ip
 cat /data/down_ip

实验5-1.png

执行脚本:

 [root@localhost ~]# bash w05.sh
 192.168.72.10 is up
 192.168.72.8 is down
 192.168.72.6 is down
 192.168.72.7 is down
 192.168.72.2 is down
 192.168.72.3 is down
 192.168.72.4 is down
 192.168.72.9 is down
 192.168.72.5 is down
 192.168.72.1 is down

实验5-2.png

实验六

实验要求:用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警。

创建脚本:

 [root@localhost ~]# vim w06.sh
 #/bin/bash
 #用户输入密码,判断密码是否正确,正确密码为123456;
 #输入正确提示正确信息,连续输错3次则报警。
 ​
 i=1
 while [ $i -le 3 ]
 do
    read -p "请输入密码:" key
    let i++
    if [ "$key" = "123456" ]
    then
        echo "密码正确"
        exit 0
    else
        echo "错啦!"
    fi
 done
 echo "警告:您已连续3次输错密码!!!"

实验6-1.png

执行脚本:

 [root@localhost ~]# bash w06.sh
 请输入密码:1
 错啦!
 请输入密码:2
 错啦!
 请输入密码:3
 错啦!
 警告:您已连续3次输错密码!!!
 [root@localhost ~]# bash w06.sh
 请输入密码:123
 错啦!
 请输入密码:123456
 密码正确

实验6-2.png

实验七

实验要求:编写能够自动生成一个8位随机密码的脚本。

创建脚本:

 [root@localhost ~]# vim w07.sh
 #!/bin/bash
 # 要求生成8位随机密码
 # 密码范围为26个英文字母和10个阿拉伯数字。
 # ---------------------
 ​
 #定义密码取值范围
 string="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
 ​
 i=1
 #循环8次
 while [ $i -le 8 ]
 do
    #每次循环随机获取0到字符串长度减1的下标值
    num=$[RANDOM % ${#string}]
    #进行字符串截取,每次随机取出1个字符
    var=${string:$num:1}
    #每次追加随机生成的密码
    passwd=$passwd$var
    let i++
 done
 echo "本次生成的密码为:$passwd"

实验7-1.png

执行脚本:

 [root@localhost ~]# bash w07.sh
 本次生成的密码为:A4oGQ5OG
 [root@localhost ~]# bash w07.sh
 本次生成的密码为:Taswn0Oa
 [root@localhost ~]# bash w07.sh
 本次生成的密码为:T49o6AWC

实验7-2.png

实验八

实验要求:使用循环语句将一个 0到255 之间的十进制数转换成二进制数。

创建脚本:

 ​
 [root@localhost ~]# vim w08.sh
 #!/bin/bash
 #使用循环语句将一个0到255之间的十进制数转换成二进制数
 ​
 read -p "请输入一个整数(0-255):" num
 ​
 i=1
 while [ $i -le 8 ]
 do
    #除以2之后取余数
    var=$[num%2]
    #将每次的余数倒序排列
    dao=$var$dao
    num=$[num/2]
    let i++
 done
 echo "转换成二进制数为:$dao"

实验8-1.png

执行脚本:

 [root@localhost ~]# bash w08.sh
 请输入一个整数(0-255):17
 转换成二进制数为:00010001
 [root@localhost ~]# bash w08.sh
 请输入一个整数(0-255):99
 转换成二进制数为:01100011
 [root@localhost ~]# bash w08.sh
 请输入一个整数(0-255):206
 转换成二进制数为:11001110

实验8-2.png