shell 编程练习题2
需求1:使用root用户清空/var/log/messages日志,并每次执行保留最近100行
1.必须是root用户
2.需要保留最后100行
[root@manager if]# cat if-19.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-19.sh
URL: https://www.xuliangwei.com
Description:
Log_Path=/var/log/messages
#如果是普通用户则拒绝
if [ $UID -ne 0 ];then
echo "Permission denied...."
exit 1
fi
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 "clean log done...."
else
echo "$Log_Path No such file or directory"
exit 2
fi
需求2:判断httpd服务是否正常启动, 脚本名必须为httpd_deamon.sh
1.手动如何看这个服务是正常的
1.ps
2.losf netstat
3.curl 200 301 302
4.systemctl
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
----------------------------------------------------------------
Description:
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
--------------------------------------------------------
Description:
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源
1.获取相同系统,不同的版本
2.根据不同系统的不同版本实现
1.判断是centos还是ubuntu
2.根据判断的条件进入嵌套if
3.根据不同的系统配置不同yum源
[root@manager if]# cat if-23.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-23.sh
URL: https://www.xuliangwei.com
Description:
system_status=$(cat /etc/redhat-release | awk '{print $(NF-1)}')
if [ ${system_status%%.} -eq 7 ];then
echo "systemctl 7"
elif [ ${system_status%%.} -eq 6 ];then
echo "systemctl 6"
fi
需求4:安装不同版本的PHP方式,使用echo输出即可,不用真的安装。
1.给一个选择的菜单
2.给一个数字编号 1 2 3 4
3.根据用户的选择进行判断
[root@manager if]# cat if-24.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-24.sh
URL: https://www.xuliangwei.com
Description:
clear
cat <<EOF
1) Installed PHP 5.5
2) Installed PHP 7.0
3) Installed PHP 7.3
4) quit
EOF
read -p "请输入你要安装的版本 [ 1 | 2 | 3 | 4 ] " Action
#判断空值
if [ -z $Action ];then
echo "请不要输出空值"
exit 1
fi
#必须是数字
if [[ ! $Action =~ ^[0-9]+$ ]];then
echo "仅支持数字"
exit 1
fi
if [ ${#Action} -ne 1 ];then
echo "仅支持一位数字"
exit 1
fi
#判断
if [ $Action -eq 1 ];then
echo "1) Installed PHP 5.5"
elif [ $Action -eq 2 ];then
echo "2) Installed PHP 7.0"
elif [ $Action -eq 3 ];then
echo "3) Installed PHP 7.3"
else
exit 1
fi
需求5:
1.如果姑娘小于18岁,打印“未成年”
2.如果姑娘大于18岁小于25岁,打印“表白”
3.如果姑娘大于25岁小于45岁,打印“阿姨好”。
4.如果姑娘大于45岁,打印“奶奶好”
read -p "请输入你的年龄" girl
11 if [ $girl -lt 18 ];then
12 echo "未成年"
13 elif [ $girl -ge 18 -a $girl -lt 25 ];then
14 echo "表白"
15 elif [ $girl -ge 25 -a $girl -lt 45 ];then
16 echo "阿姨好"
17 elif [ $girl -gt 45 ];then
18 echo "奶奶好"
19 fi
需求6:写一个脚本,提示用户输入身高,如果身高达到180以上全票,120以下免票,其余不能进。
1.需要交互
2.判断 超过180
3.判断 低于120
4.其他 over
[root@manager if]# cat if-25.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-25.sh
URL: https://www.xuliangwei.com
Description:
read -p "请输入你的身高: " Action
if [ $Action -ge 180 ];then
echo "全票"
else
if [ $Action -lt 120 ];then
echo "免票"
else
echo "over"
exit
fi
fi
需求7:判断一个机器是否存活,能ping通就算存活。
10 read -p "请输入你的ip地址" new_ip
11 ping -W1 -c1 -t3 $new_ip &>/dev/null
12 if [ $? -eq 0 ];then
13 echo "你的机器已存活"
14 else
15 echo "你的机器没有存活"
16 fi
需求8:写一个Nginx安装脚本,加入判断,当上一步执行成功在执行下一步,否则退出脚本
1.网络
2.源
3.安装
4.判断
[root@manager if]# cat if-26.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-26.sh
URL: https://www.xuliangwei.com
Description:
#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目录的所有内容,存放到/opt/bak目录,存放的形式
2019_04_10_etc.tar.gz,脚本名称为fileback,存放在/root的家目录下。
1.备份什么 /etc
2.备份到哪 /root/bak
3.备份周期 每月1号 crond
[root@manager if]# cat if-27.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-27.sh
URL: https://www.xuliangwei.com
Description:
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
需求10.监控内存小于500M和磁盘容量小于10G,则发邮件报警
1.剩余内存低于500M free -m |awk '/^Mem/ {print \(NF}'**
**2.剩余磁盘低于10G df -h|awk '/\/\)/ {print $(NF-2)}'
[root@manager if]# cat if-28.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-28.sh
URL: https://www.xuliangwei.com
Description:
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
需求11.检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员
[root@manager if]# cat if-29.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-29.sh
URL: https://www.xuliangwei.com
Description:
if [ $UID -eq 0 ];then
yum install vsftpd -y
else
echo "你不是管理员>.."
exit
fi
3.输入三个数并进行升序排序
[root@manager if]# cat if-30.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-30.sh
URL: https://www.xuliangwei.com
Description:
if [ $# -ne 3 ];then
echo "请传递三个参数"
exit
fi
echo "$1 $2 $3" | xargs -n1 | sort -n
需求15.提示用户输入年份后判断该年是否为闰年 能整除4, 并且不能被100整除则为 闰年
1.传递年份 2012 2013
2.用年份除以4
在用年份除以100
如果有余数 则是润年
如果没有 则是平年
[root@manager if]# cat if-32.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-32.sh
URL: https://www.xuliangwei.com
Description:
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 为平年"
第二种方法
read -p "请输入年份: " Y
if [ $[$Y%4] -eq 0 -a $[$Y%100] -ne 0 ] || [ $[$Y%400] -eq 0 ];then
echo "$Y 是闰年"
else
echo "$Y 是平年
需求16.根据用户输入密码位数,生成随机密码(包含数字、大小写字母、特殊符号)
[root@manager if]# cat if-31.sh
#!/bin/bash
Author: Oldux.com QQ: 552408925
Date: 2019-10-30
FileName: if-31.sh
URL: https://www.xuliangwei.com
Description:
read -p "请输入你想生成的随机数密码位数: " Action
#控制回车
#控制必须是数字
if [ $Action -ge 7 -a $Action -lt 20 ];then
mkpasswd -l $Action
else
echo "复杂度密码必须7位以上"
fi
shell 编程练习题2的更多相关文章
- shell编程练习题
求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前ss ...
- sed命令详解 vim高级技巧 shell编程上
第1章 sed命令详解 1.1 查找固定的某一行 1.1.1 awk命令方法 [root@znix ~]# awk '!/oldboy/' person.txt 102,zhangyao,CTO 10 ...
- Shell编程进阶篇(完结)
1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或 ...
- shell编程企业级实战
如何才能学好Shell编程 为什么要学习shell编程 Shell是Linux底层核心 Linux运维工作常用工具 自动化运维必备基础课程 学好shell编程所需Linux基础 熟练使用vim编辑器 ...
- Shell编程(week4_day3)--技术流ken
本节内容 1. shell流程控制 2. for语句 3. while语句 4. break和continue语句 5. case语句 6. shell编程高级实战 shell流程控制 流程控制是改变 ...
- 【转】Shell编程进阶篇(完结)
[转]Shell编程进阶篇(完结) 1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最 ...
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- linux运维、架构之路-shell编程(一)
一.shell编程入门必备基础 1.vim编辑器的命令,vimrc设置 2.150个linux基础命令 3.linux中基础的系统服务crond,ssh网络服务,nfs,rsync,inotify,l ...
随机推荐
- ETCD:TLS
原文地址:TLS etcd支持用于客户端到服务器以及对等方(服务器到服务器/集群)通信的自动TLS以及通过客户端证书的身份验证. 要启动并运行,首先要获得一个成员的CA证书和签名密钥对. 建议为集群中 ...
- 基于SpringCloud实现Shard-Jdbc的分库分表模式,数据库扩容方案
本文源码:GitHub·点这里 || GitEE·点这里 一.项目结构 1.工程结构 2.模块命名 shard-common-entity: 公共代码块 shard-open-inte: 开放接口管理 ...
- Spring Boot 2.2.2.RELEASE 版本中文参考文档
写在前面 在我初次接触MongoDB的时候,是为了做一个监控系统和日志分析系统.当时在用Java操作MongoDB数据里的数据的时候,都是在网上查找Demo示例然后完成的功能,相信大家也同样的体会,网 ...
- maven仓库之第一篇
maven jar仓库 :存放maven项目使用的jar包. 中央仓库,存放99%免费开源项目jar包,apache公司负责维护的,以T为单位的存储. 例如 : struts2-core-2.3.24 ...
- centOS如何灵活管理服务进程
1.将程序跑起来,且关闭会话时程序仍在运行. nohup node index.js & (头部加了nohup,表示在你退出帐户或关闭终端之后继续运行相应的进程;尾部的&表示在后台执 ...
- 【分享】Jenkins自动化部署全套视频教程
1.课件 见博客:在线课件 2.教程列表 课程概况:该课程共8节,时长约80分钟. 建议学习方式:你可以在上班的路上或中午休息的时候,将视频调到1.5的观看速度,视频全部看完后,在按照课件操作. 3. ...
- 26-限制容器对CPU的使用
默认设置下,所有容器可以平等地使用 host CPU 资源并且没有限制. Docker 可以通过 -c 或 --cpu-shares 设置容器使用 CPU 的权重.如果不指定,默认值为 1024. 与 ...
- Linux 和 Windows 查看当前运行的 python 进程及 GPU、CPU、磁盘利用率
目录 查看当前 python 进程 Linux Windows 查看 GPU 利用率 Linux Windows Linux CPU 利用率 Linux 磁盘利用率 查看当前 python 进程 Li ...
- acwing 81. 扑克牌的顺子
地址 https://www.acwing.com/problem/content/77/ 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的. 2-10为数字本身,A为1,J为11, ...
- 解决谷歌浏览器在F12情况下自动断点问题(Paused in debugger)
解决谷歌浏览器在F12情况下自动断点问题(Paused in debugger) 最近在使用谷歌浏览器在调试js脚本的时候,每次按F12,再刷新页面,都会跳出如上图所示的图标,自动进入断点调试.如果不 ...