AI智能
改变未来

shell脚本小练习

shell脚本小练习

  • 1.整数的四则运算
  • 代码如下:
  • 运行截图:
  • 2.输入一个分数,返回其等级
    • 代码如下:
    • 运行截图:
  • 3.截取出/etc/passwd文件里面所有的用户名,然后输出hello,用户名
    • 代码如下:
    • 运行截图:
  • 4.扫描局域网内有哪些服务器开放了80和3306端口
    • 代码如下:
    • 运行截图:
  • 5.扫描出局域网内正在使用的ip地址
    • 代码如下:
    • 运行截图:
  • 6.批量生成用户密码,用户名由用户自己输入
    • 代码如下:
    • 运行截图:
  • 7.监控内存的使用
    • 代码如下:
    • 运行截图:

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

    1.整数的四则运算

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

    代码如下:

    menu(){echo \"有以下操作:1:加法;2:减法;3:乘法;4:除法;5:退出\"read -p \"请输入你的选择:\" ans}#接受用户输入input1(){while :doread -p \"请输入第一个操作数:\" n1if ! echo $n1  |egrep \"[^0-9]\" &>/dev/null ;thenbreakfidone}input2(){while :doread -p \"请输入第二个操作数:\" n2if ! echo $n2 |egrep \"[^0-9]\" &>/dev/null;thenbreak;fidone}f_sum(){input1input2echo \"$n1+$n2=$(($n1 + $n2))\"}f_sub(){input1input2echo \"$n1-$n2=$(($n1 - $n2))\"}f_mul(){input1input2echo \"$n1*$n2=$(($n1 * $n2))\"}f_div(){input1while :doinput2if (($n2!=0));thenbreak;fiecho \"除数不能为0\"doneecho \"$n1/$n2=$(($n1 / $n2))\"}main(){menucase $ans in1)f_sum;;2)f_sub;;3)f_mul;;4)f_div;;5)exit;;*)echo \"输入错误,请输入1,2,3,4,5\";;esac}while :domainread -p \"按任意键继续\"cleardone

    运行截图:

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

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

    代码如下:

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

    运行截图:

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

    代码如下:

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

    运行截图:

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

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

    代码如下:

    #!/usr/bin#!/bin/usr#定义统计80端口和3306端口服务器开启的数量open_80=0open_3306=0>open_web_pc.txt>open_mysql_px.txt#扫描网段192.168.0.1-254,for i in $(seq  254)doif 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.txtopen_80=$(($open_80+1))  #统计量+1elif ncat -z 192.168.0.${i} 3306 &>/dev/null;thenecho \"服务器192.168.0.${i}开启了3306号端口\" >>open_mysql_pc.txtopen_3306=$((open_3306+1))fifidoneecho \"共有$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.txtfor i in $(seq 254)doif ping 192.168.0.${i} -c 1 -i 0.01 &>/dev/null;thenecho \"192.168.0.${i}地址正在使用\" >>ip_up.txtelseecho \"192.168.0.${i}地址未使用\" >>ip_down.txtfidone

    运行截图:

    查看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位的密码dopd=${pd}${total[(($RANDOM%(${#total[@]})))]}doneecho $pd}>user_ped.txtfor i in {1..10}doread -p \"请输入你的用户名:\" usernamewhile :dogetpdif ! echo $pd | egrep \".*${digit[@]}.*${L_eph[@]}.*${U_eph[@]}.*${symbol[@]}.*\" &>/dev/null;thenecho \"$username  $pd\" >>user_ped.txtbreakfidonedone

    运行截图:

    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));thenecho \"$(date +%Y-%m-%d_%H_%M_%S)  $per\" >>/var/log/memory.logfidone

    运行截图:


    查看日志文件:

    赞(0) 打赏
    未经允许不得转载:爱站程序员基地 » shell脚本小练习