shell脚本小练习


在外面报了培训班,老师布置了几个小作业,发上来记录作业的内容,避免手误删掉了我的脚本

1.整数的四则运算

输入两个数,对其进行加、减、乘、整除的操作。
要求:
①输入的是数字
②如果是除法操作时,除数不能为0。

代码如下:

menu(){
        echo "有以下操作:1:加法;2:减法;3:乘法;4:除法;5:退出"
        read -p "请输入你的选择:" ans
}

#接受用户输入
input1(){
        while :
        do
                read -p "请输入第一个操作数:" n1
                if ! echo $n1  |egrep "[^0-9]" &>/dev/null ;then
                       break
                fi     
       done
}
input2(){
        while :
        do
                read -p "请输入第二个操作数:" n2
                if ! echo $n2 |egrep "[^0-9]" &>/dev/null;then
                        break;
                fi
        done
}
f_sum(){
        input1  
        input2
        echo "$n1+$n2=$(($n1 + $n2))"
}
f_sub(){
        input1
        input2
        echo "$n1-$n2=$(($n1 - $n2))"
}
f_mul(){
        input1
        input2
        echo "$n1*$n2=$(($n1 * $n2))"
}

f_div(){
        input1
        while :
        do
                input2
                if (($n2!=0));then
                        break;
                fi
                echo "除数不能为0"
        done
        echo "$n1/$n2=$(($n1 / $n2))"
}
main(){
        menu
        case $ans in
        1)
                f_sum
                ;;
        2)
                f_sub
                ;;
        3)
                f_mul
                ;;
        4)
                f_div
                ;;
        5)
                exit
                ;;
        *)
                echo "输入错误,请输入1,2,3,4,5"
                ;;
        esac
}
while :
do
        main
        read -p "按任意键继续"
        clear
done

运行截图:

在这里插入图片描述

2.输入一个分数,返回其等级

要求:
①输入的内容是数字,且数字必须是0-100之间
②输入不能为空

代码如下:

#!usr/bin
df(){
        if (( $1 > 90 && $1 <= 100 )) ;then
                dj='A'
        elif (( $1 > 80 ));then
                dj='B'
        elif (( $1 > 70 ));then
                dj='C'
        elif (( $1 >= 0 ));then
                dj='D'
        fi
}
main(){
        while :
        do
                read -p "请输入分数" score
                #判断输入的分数是数字
                if  echo $score |egrep "^[0-9]+\b" &>/dev/null;then
                        #判断数字是否在0-100之间
                      if (( $score >=0 &&  $score <=100 ));then
                              break
                      else
                              echo "请输入0-100之间的数值"
                      fi
                #判断用户输入的是否为空
                elif [[ $score == '' ]];then
                        echo "分数长度不为0"
                fi
        done
        df $score
        echo "您的分数是$dj"
}
main

运行截图:

在这里插入图片描述

3.截取出/etc/passwd文件里面所有的用户名,然后输出hello,用户名

代码如下:

#!/usr/bin
username=$( cat /etc/passwd|awk -F: '{print $1}')
for i in $username:
do
        echo "hello,${i}"
done

运行截图:

在这里插入图片描述

4.扫描局域网内有哪些服务器开放了80和3306端口

要求:
①扫描局域网内开放了80号端口的服务器,将其写入open_web_pc.txt文档中
②扫描局域网内开放了3306号端口的服务器,将其写入open_mysql_pc.txt文档中

代码如下:

#!/usr/bin

#!/bin/usr
#定义统计80端口和3306端口服务器开启的数量
open_80=0
open_3306=0
>open_web_pc.txt
>open_mysql_px.txt
#扫描网段192.168.0.1-254,
for i in $(seq  254)
do

        if ping 192.168.0.${i} -c 1 -i 0.01 &>/dev/null;then  #判断ip是否存活
                if ncat -z 192.168.0.${i} 80 &>/dev/null;then  #判断80服务器是否开启
                        echo "服务器192.168.0.${i}开启了80号端口" >>open_web_pc.txt
                        open_80=$(($open_80+1))  #统计量+1
                elif ncat -z 192.168.0.${i} 3306 &>/dev/null;then
                        echo "服务器192.168.0.${i}开启了3306号端口" >>open_mysql_pc.txt
                        open_3306=$((open_3306+1))
                fi
        fi
done
echo "共有$open_80个服务器使用80号端口"
echo "共有$open_3306个服务器使用3306号端口"

运行截图:

在这里插入图片描述
查看open_web_pc.txt的内容如下:
在这里插入图片描述

5.扫描出局域网内正在使用的ip地址

要求:将正在使用的ip地址写入ip_up.txt,将未使用的ip地址写入ip_down.txt

代码如下:

#!/usr/bin
>ip_up.txt
>ip_down.txt
for i in $(seq 254)
do
        if ping 192.168.0.${i} -c 1 -i 0.01 &>/dev/null;then
                echo "192.168.0.${i}地址正在使用" >>ip_up.txt
        else
                echo "192.168.0.${i}地址未使用" >>ip_down.txt
        fi
done

运行截图:

查看ip_up.txt的内容
在这里插入图片描述

6.批量生成用户密码,用户名由用户自己输入

要求:用户输入用户名,系统自动为其分配20位的密码,密码必须包含大写,小写,特殊字符,数字,并将用户名和密码写入user_ped.txt里面

代码如下:

#将用户名和密码记录到文件里user_ped.txt里,格式:用户名 密码
getpd(){
        digit=(0 1 2 3 4 5 6 7 8 9)  #得到所有的数字
        #得到所有的小写字母数组
        L_eph=(a b c d e f g h i j k l m n o p q \r s t u v w x y z)
        #得到所有的大写字母数组
        U_eph=(A B C D E F G  H I J K L M N O P Q R S T U V W X Y Z)
        #得到所有的特殊字符
        symbol=('~' '#' '!' @ '&' $ % ^ _ - + . , ?)
        pd=""
        total=(${digit[@]} ${L_eph[@]} ${U_eph[@]} ${symbol[@]})
        for i in {1..20}    #随机生成20位的密码
        do
                pd=${pd}${total[(($RANDOM%(${#total[@]})))]}
        done
        echo $pd
}
>user_ped.txt
for i in {1..10}
do
        read -p "请输入你的用户名:" username
        while :
        do
                getpd
                if ! echo $pd | egrep ".*${digit[@]}.*${L_eph[@]}.*${U_eph[@]}.*${symbol[@]}.*" &>/dev/null;then
                        echo "$username  $pd" >>user_ped.txt
                        break
                fi
        done
done

运行截图:

在这里插入图片描述

7.监控内存的使用

要求:一旦内存使用率超过70%,就提醒用户,并将发生时间和使用率写入日志文件

代码如下:

#!/usr/bin
#入/var/log/memory.log中,格式是发生的时间,内存的使用率
>/var/log/memory.log   #清空文件内容
#以列表的形式得到总内存
total=($(free -m |awk '{print $2}'|egrep "[0-9]"|tr '\n' ' ' ))
#以列表形式得到空闲率
free=($(free -m |awk '{print $4}'| egrep "[0-9]" |tr '\n' ' '))
for i in $(seq ${#total[@]})
do
        #计算使用率
        per=0$(echo "scale=4;1-${free[(($i-1))]}/${total[(($i-1))]}" |bc)
        a=$(echo "$per> 0.7"|bc)   #如果使用率超过70%,则写入内存
        if (($a==1));then
                echo "$(date +%Y-%m-%d_%H_%M_%S)  $per" >>/var/log/memory.log
        fi
done

运行截图:

在这里插入图片描述
查看日志文件:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值