初学shell必做的 if判断while循环小练习

Posted 我的紫霞辣辣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初学shell必做的 if判断while循环小练习相关的知识,希望对你有一定的参考价值。

用shell语言写一个登陆功能,超过三次,禁止登陆

#!/bin/bash
a=1

while true
do
        if (($a <= 3));then
                read -p "username:" name
                read -p "password:" pwd

                if [ $name = "nana" ] && [ $pwd = 123 ];then
                        echo "登陆成功" 
                        break
                else
                        echo "账号或者密码错误"                 
                        a=$a+1
                fi
        else
                echo "输入超过三次!!!"
                break
        fi
done

猜年龄,如果输入不是数字重新输入,猜对了游戏结束,猜不对一直猜

#!/bin/bash

while true
do

read -p "输入你猜的年龄:" age

[[ ! $age =~ ^[1-9]+$ ]] && echo "输入数字" && continue

if (( $age > 18 ));then
        echo "猜大啦"
elif (( $age < 18 ));then
        echo "猜小啦"
else
        echo "猜对啦"
        break
fi
done

成绩查询,必须输入数字,如果不是数字重新输入

#!/bin/bash

while true
do

read -p "输入成绩" score

[[ ! $score =~ ^[0-9]+$ ]] && echo "输入数字" && continue

if (( $score >= 90 ));then
        echo "有点东西啊,小伙子!"
        break
elif (( $score >= 80 ));then
        echo "良好"
        break
elif (( $score >= 60 ));then
        echo "及格"
        break
else
        echo "不及格!!!"i
        break
fi

done

判断输入的是否是数字

#!/bin/bash

while true
do

read -p "判断输入的是否是数字,输入数字:" num

if [[ $num =~ ^[0-9]+$ ]];then
        echo "输入的是数字"
        break
else
        echo "输入不是数字,重新输入:"
fi
done

判断文件类型

#!/bin/bash

if [ -d $1 ];then
        echo "目录类型"
elif [ -f $1 ];then
        echo "文件类型"
elif [ -L $1 ];then
        echo "软链接"
else
        echo "无法识别文件类型"
fi

判断一个用户是否存在

[root@m01 ~]# id 1
uid=1(bin) gid=1(bin) groups=1(bin)
[root@m01 ~]# id root
uid=0(root) gid=0(root) groups=0(root)
#!/bin/bash

id $1 &> /dev/null

if [ $? -eq 0 ];then
        echo "该用户已存在"
else
        echo "该用户不存在"
fi

判断httpd软件是否安装,如果没有安装则安装

#!/bin/bash

rpm -qa httpd &>/dev/null

if [[ $? -eq 0 ]];then
        echo "httpd已经安装"
else
        echo "httpd正在安装"
        yum -y intall httpd &> /dev/null
        echo "httpd安装完成"
fi

判断80端口的状态,未开启则重启

[root@m01 ~]# netstat -lntp | grep LISTEN | grep "\\b22\\b"
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1376/sshd           
tcp6       0      0 :::22                   :::*                    LISTEN      1376/sshd           
#!/bin/bash

netstat -lntp | grep LISTEN | grep "\\b80\\b" &> /dev/null

if [ $? -eq 0 ];then
        echo "80号端口已经开启"
else
        echo "80号端口没有开启"
        systemctl restart nginx &> /dev/null
        if [ $? -eq 0 ];then
                echo "80端口重启成功"
        else
                echo "80端口重启失败"
        fi
fi

编写监控脚本,如果根分区剩余空间小于10%,内存的可用空间小于30%,向用户发送告警邮件,邮件的内容包含使用率相关信息

[root@m01 ~]# echo `df / | grep / | awk '{print $5}'`
12%
[root@m01 ~]# df / | grep / | awk '{print $5}' | cut -d% -f1
12
提取根分区剩余空间
[root@m01 ~]# df /
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  19908608 2305872  17602736  12% /
[root@m01 ~]# df / | grep / | awk 'NR=5 {print $5}' | cut -d% -f1
12

提取内存剩余空间
[root@m01 ~]# free
              total        used        free      shared  buff/cache   available
Mem:         995676      147244      626416        7832      222016      701232
Swap:             0           0           0		
[root@m01 ~]# free | awk 'NR==2{print $NF}'				$NF就是指定NR==那一行数据最后一列的那个值
701072
[root@m01 ~]# free | awk 'NR==2{print $2}'				根分区总共的内存空间
995676
[root@m01 ~]# awk_a1=`free | awk 'NR==2{print $NF}'`			根分区的可使用的内存空间
[root@m01 ~]# awk_a2=`free | awk 'NR==2{print $2}'`				根分区总共的内存空间
[root@m01 ~]# echo "scale=2;$awk_a2/$awk_a1" | bc 				根分区总的内存空间(取两位数)/可使用的内存空间
1.42
[root@m01 ~]# echo "scale=2;$awk_a2/$awk_a1" | bc | cut -d. -f2			
42
#! /bin/bash
# 提取根分区剩余空间
use_disk=`df / | grep / | awk '{print $5}'`
use_percent=`echo $use_disk|cut -d% -f1`

# 提取内存剩余空间
avail_mem=`free | awk 'NR==2{print $NF}'`
total_mem=`free | awk 'NR==2{print $2}'`
avail_percent=`echo "scale=2;$avail_mem/$total_mem"|bc | cut -d. -f2`

# 注意 磁盘提取的数值单位为 kb、 内存提取的单位为 Mb
if [ $use_percent -gt 90 ];then
     echo "邮件内容:根分区已经使用为${user_disk}低于10%,请及时处理!!!" | mail -s "硬盘报警邮件" root
fi

if [ $avail_percent -lt 30 ];then
     echo "邮件内容:内存剩余${free_percent}%,低于30%" | mail -s "内存报警邮件" xxx@163.com
fi

以上是关于初学shell必做的 if判断while循环小练习的主要内容,如果未能解决你的问题,请参考以下文章

初学sheel脚本练习过程

shell脚本while用法

初学python随笔——控制和循环语句

shell if特殊 case判断for循环while循环breakcontinue

shell练习题之bash知识点(for循环if判断语句结构练习)

shell脚本之流程控制