Shell 脚本 100 例《五》

41. 检测 MySQL 服务是否存活
#!/bin/bash
#Author:丁丁历险(Jacob)
#host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码
#这些信息需要根据实际情况修改后方可使用
host=127.0.0.1
user=root
passwd=123456
mysqladmin ‐h 127.0.0.1 ‐u root ‐p'$passwd'  ping  &>/dev/null
if  [  $?  ‐eq  0  ];then
       echo  "MySQL is UP"
else
       echo  "MySQL is down"
fi
42. 备份 MySQL 的 shell 脚本(mysqldump 版本)
#!/bin/bash
#Author:丁丁历险(Jacob)
#定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签)
#dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)
 
user=root
passwd=123456
dbname=mysql
date=$(date +%Y%m%d)
 
#测试备份目录是否存在,不存在则自动创建该目录
[  ! ‐d  /mysqlbackup  ] &&  mkdir  /mysqlbackup
#使用 mysqldump 命令备份数据库
mysqldump ‐u"$user"  ‐p"$passwd" "$dbname" > /mysqlbackup/"$dbname"‐${date}.sql
 
43. 将文件中所有的小写字母转换为大写字母
#!/bin/bash

#$1 是位置参数,是你需要转换大小写字母的文件名称
#执行脚本,给定一个文件名作为参数,脚本就会将该文件中所有的小写字母转换为大写字母
tr  "[a‐z]"  "[A‐Z]"  < $1
 
44. 非交互自动生成 SSH 密钥文件
#!/bin/bash
#‐t 指定 SSH 密钥的算法为 RSA 算法;‐N 设置密钥的密码为空;‐f 指定生成的密钥文件存放在哪里
rm  ‐rf  ~/.ssh/{known_hosts,id_rsa*}
ssh‐keygen ‐t RSA ‐N '' ‐f ~/.ssh/id_rsa
 
45. 检查特定的软件包是否已经安装
#!/bin/bash
#Author:丁丁历险(Jacob)
if [ $# ‐eq 0 ];then
  echo "你需要制定一个软件包名称作为脚本参数"
  echo "用法:$0 软件包名称 ..."
fi
#$@提取所有的位置变量的值,相当于$*
for package in "$@"
do
  if rpm ‐q ${package} &>/dev/null ;then
 
echo ‐e "${package}\033[32m 已经安装\033[0m"
  else
 
echo ‐e "${package}\033[34;1m 未安装\033[0m"
  fi
done
 
46. 监控 HTTP 服务器的状态(测试返回码)
#!/bin/bash
#Author:丁丁历险(Jacob)
#设置变量,url 为你需要检测的目标网站的网址(IP 或域名)
url=http://192.168.4.5/index.html
 
#定义函数 check_http:
#使用 curl 命令检查 http 服务器的状态
#‐m 设置 curl 不管访问成功或失败,最大消耗的时间为 5 秒,5 秒连接服务为相应则视为无法连接
#‐s 设置静默连接,不显示连接时的连接速度、时间消耗等信息
#‐o 将 curl 下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)
#‐w 设置 curl 命令需要显示的内容%{http_code},指定 curl 返回服务器的状态码
check_http(){
status_code=$(curl ‐m 5 ‐s ‐o /dev/null ‐w %{http_code} $url)
}
 
while :
do
  check_http
  date=$(date +%Y%m%d‐%H:%M:%S) 

#生成报警邮件的内容
  echo "当前时间为:$date
  $url 服务器异常,状态码为${status_code}.
  请尽快排查异常." > /tmp/http$$.pid
 
#指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志
  if [ $status_code ‐ne 200 ];then
 
mail ‐s Warning root < /tmp/http$$.pid
  else
 
echo "$url 连接正常" >> /var/log/http.log
  fi
  sleep 5
done
 
47. 自动添加防火墙规则,开启某些服务或端口(适用于 RHEL7)
#!/bin/bash
#Author:丁丁历险(Jacob)
#设置变量定义需要添加到防火墙规则的服务和端口号
#使用 firewall‐cmd ‐‐get‐services 可以查看 firewall 支持哪些服务
service="nfs http ssh"
port="80 22 8080"
 
#循环将每个服务添加到防火墙规则中
for i in $service
do
  echo "Adding $i service to firewall"
  firewall‐cmd  ‐‐add‐service=${i}
done
 
#循环将每个端口添加到防火墙规则中
for i in $port
do
  echo "Adding $i Port to firewall"
  firewall‐cmd ‐‐add‐port=${i}/tcp
done
#将以上设置的临时防火墙规则,转换为永久有效的规则(确保重启后有效)
firewall‐cmd  ‐‐runtime‐to‐permanent
 
48. 使用脚本自动创建逻辑卷
#!/bin/bash
#Author:丁丁历险(Jacob)
#清屏,显示警告信息,创建将磁盘转换为逻辑卷会删除数据
clear
echo ‐e "\033[32m           !!!!!!警告(Warning)!!!!!!\033[0m"
echo
echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
echo "脚本会将整个磁盘转换为 PV,并删除磁盘上所有数据!!!"
echo "This Script will destroy all data on the Disk"
echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
echo
read ‐p "请问是否继续 y/n?:" sure

#测试用户输入的是否为 y,如果不是则退出脚本
[ $sure != y ] && exit
 
#提示用户输入相关参数(磁盘、卷组名称等数据),并测试用户是否输入了这些值,如果没有输入,则脚本退出
read ‐p "请输入磁盘名称,如/dev/vdb:" disk
[ ‐z $disk ] && echo "没有输入磁盘名称" && exit
read ‐p "请输入卷组名称:" vg_name
[ ‐z $vg_name ] && echo "没有输入卷组名称" && exit
read ‐p "请输入逻辑卷名称:" lv_name
[ ‐z $lv_name ] && echo "没有输入逻辑卷名称" && exit
read ‐p "请输入逻辑卷大小:" lv_size
[ ‐z $lv_size ] && echo "没有输入逻辑卷大小" && exit
 
#使用命令创建逻辑卷
pvcreate $disk
vgcreate $vg_name $disk
lvcreate ‐L ${lv_size}M ‐n ${lv_name}  ${vg_name}
 
49. 显示 CPU 厂商信息
#!/bin/bash
awk '/vendor_id/{print $3}' /proc/cpuinfo |uniq
 
50. 删除某个目录下大小为 0 的文件
#!/bin/bash
#/var/www/html 为测试目录,脚本会清空该目录下所有 0 字节的文件
dir="/var/www/html"
find $dir  ‐type f  ‐size  0  ‐exec  rm   ‐rf {} \;

转载于:https://my.oschina.net/szwangsen/blog/1612698

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值