shell脚本大全(三)

一、检测 MySQL 服务的状态

#!/bin/bash
 
# 检测 MySQL 服务的状态 
 
host=192.168.13.138
user=root
passwd=123456
mysqladmin -h '$host' -u '$user' -p'$passwd' ping &>/dev/null
if [ $? -eq 0 ]
then
        echo "MySQL is UP"
else
        echo "MySQL is down"
fi

二、备份 MySQL 数据库

# 备份 MySQL 的 shell 脚本
 
# 定义变量 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

三、将文件中所有的小写字母转换为大写字母

#shell代码
tr "[a‐z]" "[A‐Z]" < $1

#执行
./aa.sh ./a.txt

四、监控HTTP服务器的状态

# 监控 HTTP 服务器的状态

# 设置变量,url为你需要检测的目标网站的网址(IP 或域名),比如百度
url=https://www.jsbke.cn

# 定义函数方法 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
        echo "状态码:$status_code"
        date=$(date +%Y%m%d‐%H:%M:%S)

# 生成报警邮件的内容
        echo "当前时间为:$date
        $url 服务器异常,状态码为${status_code}.
       请尽快排查异常." > /tmp/http.pid

# 指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志
        if [ $status_code -ne 200 ];then
                echo '运行有误'
                #邮箱提示
               # mail -s Warning root < /tmp/http$$.pid

               #记录日志
               echo "当前的时间为:$date,连接为:$url服务器异常,状态码为$status_code,请排查" >> ./http_error.log
        else
                echo "链接正常"
                #记录日志
                echo "$url 连接正常" >> /var/log/http.log
        fi
        sleep 5
done

五、自动添加防火墙规则

# 使用 firewall‐cmd ‐‐get‐services 可以查看 firewall 支持哪些服务
service="nfs http ssh"
port="80 22 8080 8082"

# 循环将每个服务添加到防火墙规则中
for i in $service
do
        echo "添加 $i 服务到防火墙"
        firewall-cmd  --add-service=${i}
done

#循环将每个端口添加到防火墙规则中
for i in $port
do
        echo "添加 $i 端口到防火墙"
        firewall-cmd --add-port=${i}/tcp
done
#将以上设置的临时防火墙规则,转换为永久有效的规则(确保重启后有效)
firewall-cmd  --runtime-to-permanent

六、删除某个目录下文件大小为0的文件

#./aaa 为测试目录,脚本会清空该目录下所有 0 字节的文件
dir="./aaa"
find $dir -type f -size 0 -exec rm -rf {} \;

七、生成随机密码

# 生成随机密码
 
# 使用$#统计密码库的长度
key="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
num=${#key}
# 设置初始密码为空
pass=''
# 循环 8 次,生成随机密码
# 每次都是随机数对密码库的长度取余,确保提取的密码字符不超过密码库的长度
# 每次循环提取一位随机密码,并将该随机密码追加到 pass 变量的最后
for i in {1..8}
do  
  index=$[RANDOM%num]
  pass=$pass${key:$index:1}
done
echo $pass
# 生成随机密码(UUID 版本,16 进制密码) 
uuidgen
# 生成随机密码(进程 ID 版本,数字密码)
echo $$

八、批量下载有序文件(pdf、图片、视频等等)

# 批量下载有序文件(pdf、图片、视频等等)

# 本脚本准备有序的网络资料进行批量下载操作(如 01.jpg,02.jpg,03.jpg)
# 设置资源来源的域名连接
url="http://www.baidu.com/"
echo  "开始下载..."
sleep 2
type=jpg
for i in `seq 100`
do
        echo "正在下载$i.$type"
        curl $url/$i.$type -o ./img/${i}$type
        sleep 1
done
#curl 使用-o 选项指定下载文件另存到哪里.

九、显示当前计算机中所有账户的用户名称

# 下面使用3种不同的方式列出计算机中所有账户的用户名
# 指定以:为分隔符,打印/etc/passwd 文件的第 1 列
awk -F: '{print $1}' /etc/passwd
echo "-------------------------------------------------------------------"
# 指定以:为分隔符,打印/etc/passwd 文件的第 1 列
cut -d: -f1 /etc/passwd
 echo "-------------------------------------------------------------------"
# 使用 sed 的替换功能,将/etc/passwd 文件中:后面的所有内容替换为空(仅显示用户名)
sed 's/:.*//' /etc/passwd

十、制定目录路径,脚本自动将该目录使用 tar 命令打包备份到/data目录

# 制定目录路径,脚本自动将该目录使用 tar 命令打包备份到/data目录

[ ! -d /data ] && mkdir /data
[ -z $1 ] && exit
if [ -d $1 ];then
        tar -czf /data/$1.-`date +%Y%m%d`.tar.gz $1
else
        echo "该目录不存在"
fi
上一篇:Linux12


下一篇:不使用useradd 创建用户