shell脚本之if实例详解

练习题

需求1:使用root用户清空/var/log/messages日志,并每次执行保留最近100行
1)判断是否是root        
2)判断文件存在        
3)清空后需要保留最近100行 

[root@manager day02lx]# cat var01.sh 
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var01.sh

#设置变量
Log_Path=/var/log/messages
#1、判断用户是否为root用户
if [ $UID -ne 0 ];then
	echo "请登录root用户"
	exit 1
fi
#2、判断文件中有没有此文件、先提取文件、再写入文件
if [ -f $Log_Path ];then
	#先提取100行的内容写入新的文件
	tail -100 $Log_Path >/var/log/messages_bak
	#将新的文件重新写入到/var/log/messages中
	cat /var/log/messages_bak > $Log_Path
	#最后删除文件
	rm -f /var/log/messages_bak
	#输出结果
	echo "恭喜你--您的100行日志已经备份成功"
else
	echo "$Log_Path No such file or directory"
	exit 2
fi

[root@manager day02lx]# bash var01.sh 
恭喜你--您的100行日志已经备份成功


需求2:判断httpd服务是否正常启动,  脚本名必须为httpd_deamon.sh
[root@manager day02lx]# cat var02.sh 
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var02.sh

systemctl status httpd &>/dev/null
if [ $? -eq 0 ];then
	echo "httpd is ok...."
else
	systemctl start httpd &>/dev/null
	if [ $? -eq 0 ];then
		echo "Httpd 重新启动ok"
	else
		echo "httpd 重新启动失败"
	fi
fi
[root@manager day02lx]# bash var02.sh httpd
httpd 重新启动失败
----------------------------------------------
第二种:
Httpd_status=$(ps aux|grep httpd | grep -v grep |wc -l)


if [ $Httpd_status -ge 1 ];then
	echo "httpd service is ok"
else
	systemctl start httpd &>/dev/null
	if [ $? -eq 0 ];then
		echo "重新拉起成功"
	else
		echo "重新拉起失败"
	fi
fi
----------------------------------------------
第三种:
Httpd_Status=$(curl -sI  localhost | awk '/HTTP/ {print $2}')


if [[ "$Httpd_Status" -eq 200  ||  "$Httpd_Status" -eq 301  ||  "$Httpd_Status" -eq 302 ]];then
	echo "Httpd is ok ...."
else
	echo "Httpd is down...."
	echo "尝试复活中......."
	sleep 3
	systemctl start httpd &>/dev/null
	if [ $? -eq 0 ];then
		echo "复活成功"
	else
		echo "复活失败"
	fi
fi
-----------------------------------------------

需求3:根据不同的系统版本,配置不同的yum源
[root@manager day02lx]# cat var03.sh 
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var03.sh
tt==$(cat /etc/redhat-release  | awk '{print $(NF-1)}')
if [${tt%%.*} -eq "6"];then
	mkdir -p /etc/yum.repos.d/backup/
	mv /etc/yum.repos.d/.*repo /etc/yum.repos.d/backup/
	curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
	curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
	echo "CentOS $tt 系统已经配置好yum仓库"
elif [ ${tt%%.*} -eq 7 ];then
	mkdir -p /etc/yum.repos.d/backup
	mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
    	curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
        curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
	echo "CentOS $tt 系统已经配置好yum仓库"
	fi

需求4:安装不同版本的PHP方式,使用echo输出即可,不用真的安装。
[root@manager day02lx]# cat var04.sh
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var04.sh

###为了显示高大上,咱们模拟一个系统可视化界面
clear
cat <<EOF
=====================================
1) Installed PHP 5.5 
2) Installed PHP 7.0
3) Installed PHP 7.3 
4) quit
=====================================
EOF

read -p "请输入你要安装的php版本 [ 1 | 2 | 3 | 4 ]:" install
#判断空值
if [ -z $install ];then
	echo "请不要输入空的数字"
	exit 1
fi
#必须输入数字
if [[  ! ${install} =~ ^[0-9]+$ ]];then
	echo "仅仅支持数字"
	exit1
fi
#仅支持一位数字
if [ ${#install} -ne 1 ];then
	echo "仅支持一位数字"
	exit 1
fi
if [ ${install} -eq 1 ];then
	echo "正在下载php-5.5"
	sleep 3
	echo "php-5.5下载成功"
fi

if [ ${install} -eq 2 ];then
        echo "正在下载php-7.0"
	sleep 3
	echo "php-7.0下载成功"
fi
if [ ${install} -eq 3 ];then
        echo "正在下载php-7.3"
	sleep 3
	echo "php-7.3下载成功"
fi

[root@manager day02lx]# bash var04.sh 
请输入你要安装的php版本 [ 1 | 2 | 3 | 4 ] : 1
正在下载php-5.5
php-5.5下载成功


需求5:
1.如果姑娘小于18岁,打印“未成年” 
2.如果姑娘大于18岁小于25岁,打印“表白”
3.如果姑娘大于25岁小于45岁,打印“阿姨好”。
4.如果姑娘大于45岁,打印“奶奶好”
---------------------------------------------------
-eq 相等	-ne 不等于	-gt 大于	-ge 大于等于  -lt 小于  -le 小于等于
---------------------------------------------------
[root@manager day02lx]# cat var05.sh 
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var05.sh
read -p "请输入姑娘的年龄进行查询操作:" Year

if [ ${Year} -lt 18 ];then
	echo "未成年"
elif [ ${Year} -gt 18 -a ${Year} -lt 25 ];then
	echo "表白"
elif [ ${Year} -gt 25 -a ${Year} -lt 45 ];then
	echo "阿姨好"
elif [ ${Year} -gt 45 ];then
	echo "奶奶好"
fi

[root@manager day02lx]# bash var05.sh 
请输入姑娘的年龄进行查询操作:32
阿姨好
[root@manager day02lx]# bash var05.sh 
请输入姑娘的年龄进行查询操作:4
未成年
[root@manager day02lx]# bash var05.sh 
请输入姑娘的年龄进行查询操作:60
奶奶好


需求6:写一个脚本,提示用户输入身高,如果身高达到180以上全票,120以下免票,其余不能进。

[root@manager day02lx]# cat var06.sh 
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var06.sh
read -p "请输入游客身高cm:" High
if [ ${High} -gt 180 ];then 
	echo "请购买全价票"
elif [ ${High} -lt 120 ];then
	echo "恭喜,您的票价免费"
else
	echo "抱歉,由于身高限制,您无法进入园区"
fi
--------------------------------------------
方法2
read -p "请输入你的身高: " Action

if [ $Action -ge 180 ];then
	echo "全票"
else
	if [ $Action -lt 120 ];then
		echo "免票"
	else
		echo "over"
		exit
	fi
fi

[root@manager day02lx]# bash var06.sh 
请输入游客身高cm:190
请购买全价票
[root@manager day02lx]# bash var06.sh 
请输入游客身高cm:65
恭喜,您的票价免费


需求7:判断一个机器是否存活,能ping通就算存活。

[root@manager day02lx]# cat var07.sh 
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var07.sh
read -p "请输入您要判断的IP:" Ip
ping -c 1 -W1  ${Ip} >/dev/null
if [ $? -eq 0 ];then
	echo "${Ip} 是存活的"
else
	echo "${Ip} 不存活"
fi

请输入您要判断的IP:10.0.0.51
10.0.0.51 不存活
[root@manager day02lx]# bash var07.sh 
请输入您要判断的IP:172.16.1.7
172.16.1.7 不存活


需求8:写一个Nginx安装脚本,加入判断,当上一步执行成功在执行下一步,否则退出脚本
	1.网络
	2.源
	3.安装
	4.判断
[root@manager if]#cat var19.sh
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var07.sh

#1.网络
ping -W1 -c1 www.baidu.com &>/dev/null
if [ $? -ne 0 ];then
	echo "网络存在故障...."
	exit 1
fi

#2.源  记得要判断系统
if [ -f /etc/yum.repos.d/epel.repo ];then
	if [ -s /etc/yum.repos.d/epel.repo ];then
		echo "yum repos skip ...."
	else
		echo "epel 为空  wget ..."
		#wget .... 
	fi
else
	echo "epel文件不存在"
	#wget .......
fi

#3.安装
rpm -q nginx &>/dev/null
rc=$?

if [ $rc -eq 0 ];then
	echo "nginx已安装"
else
	yum install nginx -y 
fi

需求9:在每月第一天备份并压缩/etc目录的所有内容,存放到/root/bak目录,存放的形式
2019_04_10_etc.tar.gz,脚本名称为fileback,存放在/root的家目录下。
	1.备份什么	/etc
	2.备份到哪	/root/bak
	3.备份周期	每月1号 crond
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var07.sh

Dest_Dir=/opt/bak
Date=$(date +%F)
#准备存放的目录
if [ ! -d $Dest_Dir ];then
	mkdir -p $Dest_Dir
fi

#打包并将内容存放置备份的目录
cd / && tar czf $Dest_Dir/etc_${Date}.tar.gz etc 

#判断是否ok
if [ ! -f $Dest_Dir/etc_${Date}.tar.gz ];then
	echo "备份失败>......"
fi

-------------------------------------------------------
示例演示

1.监控内存小于500M和磁盘容量小于10G,则发邮件报警

###############Linux添加swap分区方法:##############
https://blog.csdn.net/chinalinuxzend/article/details/1759593



#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var07.sh
Free=$(free -m |awk '/^Mem/ {print $NF}')
Disk=$(df -h|awk '/\/$/ {print $(NF-2)}')

if [ $Free -lt 500 -a ${Disk%G} -lt 10 ];then
	echo "报警......"
else
	echo "目前一切良好"
	echo "内存是: ${Free}M   磁盘是: $Disk"
fi


2.检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员

#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var07.sh
if [ $UID -eq 0 ];then
	yum install vsftpd -y
else
	echo "你不是管理员>.."
	exit
fi


3.输入三个数并进行升序排序

#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var07.sh

if [ $# -ne 3 ];then
	echo "请传递三个参数"
	exit 
fi
echo "$1 $2 $3" | xargs -n1 | sort -n


4.提示用户输入年份后判断该年是否为闰年  能整除4, 并且不能被100整除则为 闰年
	2012 / 4  = 整数      2012 / 100 = 有余数     
	1.传递年份   2012 2013 
	2.用年份除以4
		2.1 在用年份除以100
			如果有余数  则是润年
			如果没有    则是平年
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var07.sh

read -p "请输入你想检测的年份: " Action
#1.先除以4
rn=$(( ${Action} % 4 ))
rn_2=$(( ${Action} % 100 ))
rn_3=$(( ${Action} % 400 ))


#1.判断是否能被400整除
if [ $rn_3 -eq 0 ];then
	echo "$Action 为闰年"
	exit 
else
	#2.没有被400整除的, 先除以4
	if [ $rn -eq 0 ];then
		#3.成立,在除以100,有余数则润
		if [ $rn_2 -ne 0 ];then
			echo "$Action 为闰年"
			exit
		fi
	fi
fi
	echo "$Action 为平年"
----------------------------------------------
方法2
----------------------------------------------
read -p "请输入年份: " Y
if [ $[$Y%4] -eq 0 -a $[$Y%100] -ne 0 ] || [ $[$Y%400] -eq 0 ];then
   echo "$Y 是闰年"
else
   echo "$Y 是平年


5.根据用户输入密码位数,生成随机密码(包含数字、大小写字母、特殊符号)
	mkpasswd 
	1.怎么生成随机数  mkpasswd -l 8
	2.控制输入的长度,最少8位
read -p "请输入你想生成的随机数密码位数: " Action
#控制回车、
#控制必须是数字
#!/bin/bash
#********************************************************************
#Author:               一个shell小白
#QQ:                  2226823216
#Date:                2019-10-29
#FileName:            var07.sh
if [ $Action -ge 7  -a $Action -lt 20 ];then
	mkpasswd -l $Action
else
	echo "复杂度密码必须7位以上"
fi


posted @   老王教你学Linux  阅读(797)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示