初学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循环小练习的主要内容,如果未能解决你的问题,请参考以下文章
shell if特殊 case判断for循环while循环breakcontinue