Linux-day08
第17章 大数据定制篇-shell编程shell编程快速入门
https://i-blog.csdnimg.cn/direct/0d07afc6a2204935875187163126e0cb.png
https://i-blog.csdnimg.cn/direct/b862575ef6a3468c88fccbb940157814.png
https://i-blog.csdnimg.cn/direct/cf8f2d744a274e1d90010d6f6fef32f6.png
https://i-blog.csdnimg.cn/direct/e205c068f9cf446ba8217ab6837872f1.png
shell变量
https://i-blog.csdnimg.cn/direct/348236485b784f78a4cfd1151ea26d14.png
https://i-blog.csdnimg.cn/direct/3280a7118d21433485e38ba408b946ae.png
https://i-blog.csdnimg.cn/direct/201d27a2c80045c59eadbd3a7e3f027c.png
https://i-blog.csdnimg.cn/direct/7d09963e09c24c40b9f491d28cda6fcc.png
https://i-blog.csdnimg.cn/direct/4468e35dc9ca43388054d52849deb909.png
设置环境变量
https://i-blog.csdnimg.cn/direct/ee4904d9f49c4bd9a20505b58e2e6939.png
https://i-blog.csdnimg.cn/direct/ec84ff96da384d5d93a74739b0906709.png
https://i-blog.csdnimg.cn/direct/0940a1abce1d4ed1ba742a8b8ed3cceb.png
把行号打开 set nu
https://i-blog.csdnimg.cn/direct/27a69c87a6244af197dd92054f1c023b.png
位置参数变量
https://i-blog.csdnimg.cn/direct/6a95946279834e39979d3356d81d5bc5.png
https://i-blog.csdnimg.cn/direct/07e3c47da9dc461995082baad32f4c88.png
https://i-blog.csdnimg.cn/direct/7902d59b9eb747068f62ae776c1a4cad.png
预定义变量
https://i-blog.csdnimg.cn/direct/1eac7af23fc0424ba08e230c57cbf968.png
https://i-blog.csdnimg.cn/direct/6d40c04a68044dd690f80f8f150d49fa.png
https://i-blog.csdnimg.cn/direct/b815dfdee78049f989828b9494888491.png
在一个脚本中实行了别的一个脚本所以卡住了 CTRL+C退出
运算符
https://i-blog.csdnimg.cn/direct/458519470b91495abac83f61fbf649cd.png
operator运算符
https://i-blog.csdnimg.cn/direct/0c9a1c1be2f645328713f1b918d4e0b6.png
https://i-blog.csdnimg.cn/direct/c02539ca7b314c9f84689113a15aabea.png
https://i-blog.csdnimg.cn/direct/88d8003b7fca46d5ae3d4ef9008123e7.png
条件判定
https://i-blog.csdnimg.cn/direct/e7c79048599f42ce915ef1e5dda5c95f.png
https://i-blog.csdnimg.cn/direct/91e51bb3e60c42349e89401c5c95cffa.png
https://i-blog.csdnimg.cn/direct/c47ac74fbf654a37b7a286c2554dbc7d.png
https://i-blog.csdnimg.cn/direct/120562a95bb1474b8b35f564aa9bff1e.png
流程控制
单分支多分支
https://i-blog.csdnimg.cn/direct/beab020c755f463a8c6165f418b7bc4d.png
case语句
https://i-blog.csdnimg.cn/direct/19c0716d92b14a539c0eae42d61d3a05.png
https://i-blog.csdnimg.cn/direct/8fa058da7b1f4851a6cab0c271b27b59.png
for循环
https://i-blog.csdnimg.cn/direct/c66c0125d42e46ebaea54bb88bef1e84.png
https://i-blog.csdnimg.cn/direct/17e1c22635d64bec8af1259ee30cd05e.png
https://i-blog.csdnimg.cn/direct/c2446041886944b49fd8ab6045c0df8b.png
https://i-blog.csdnimg.cn/direct/5ae4527890044332998c7344063cbb95.png
反复的把取出来的i值累积
https://i-blog.csdnimg.cn/direct/0d677e070e96431e81b59f1ad6073f8d.png
https://i-blog.csdnimg.cn/direct/4e8c5ef0debf4d28a93e2e5b1cf04683.png
while循环
https://i-blog.csdnimg.cn/direct/d0f3db96e1784819b897485c3337a32b.png
https://i-blog.csdnimg.cn/direct/7a4a69cb8cd84335ac017ca039ee16ba.png
read获取输入
read读取控制台输入,用户动态的输入一些数据
https://i-blog.csdnimg.cn/direct/43adc34e0119477980182f855bbc281c.png
https://i-blog.csdnimg.cn/direct/0c75d0e1e1fa4dac99796537533bf425.png
https://i-blog.csdnimg.cn/direct/fbf58c24bba348609d699a22be96c022.png
函数
https://i-blog.csdnimg.cn/direct/13df97e837a64c1eaa8a767a5576cedc.png
体系函数
https://i-blog.csdnimg.cn/direct/226ab2c643bf48c6aadf82d1d9303f4d.png
https://i-blog.csdnimg.cn/direct/b4d33349068e4e2cba32fb7b04995367.png
https://i-blog.csdnimg.cn/direct/7c9183c665ef45559894f098aa0ebe9b.png
https://i-blog.csdnimg.cn/direct/e660516f4d97479c845b2deacb5a48c5.png
自定义函数
https://i-blog.csdnimg.cn/direct/825c872a60b941128cc7fa7904cbdba2.png
https://i-blog.csdnimg.cn/direct/c5c0dac0850541cfaa5ce1a2310106cc.png
https://i-blog.csdnimg.cn/direct/43556405961940bb9af089fcd06412d4.png
定时备份数据库
https://i-blog.csdnimg.cn/direct/58f9b53686a94d9e8273fc09445aefc2.png
https://i-blog.csdnimg.cn/direct/c894803a63e64249bbed2332447f0711.png
为什么要把脚本放在这个目录下
由于这个目录下面是root用户实行的权限,未来也会用root身份给它设置任务调度
当代码比力多时,可以边写边测试
需求是如果BACKUP目录下没有这个以当前时间为名字的目录,就创建一个
mkdir -p指令的意思是, 确保目录名称存在,不存在的就建一个。
#!/bin/bash
# 备份目录,指定了备份文件存储的根目录
BACKUP=/data/backup/db
# 当前时间,使用 date 命令获取当前的日期和时间,格式为年-月-日_时:分:秒
DATETIME=$(date +%Y-%m-%d_%H%M%S)
# 数据库的主机(地址),这里使用的是本地主机
HOST=localhost
# 数据库用户名,使用 root 用户
DB_USER=root
# 数据库密码,此处为 *********
DB_PW=*********
# 备份的数据库名,要备份的数据库是 wujiao1
DATABASE=wujiao1
# 创建备份目录,如果不存在,就创建
# [! -d "${BACKUP}/${DATETIME}" ] 是一个条件判断,用于检查备份目录是否存在
#! -d 表示目录不存在
# && 表示逻辑与,如果前面的条件为真,则执行后面的命令
# mkdir -p 命令用于创建目录,-p 选项表示如果父目录不存在,会一并创建
[! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
# 备份数据库
# mysqldump 是一个用于备份 MySQL 数据库的工具
# -u${DB_USER} 指定数据库用户名
# -p${DB_PW} 指定数据库密码
# --host=${HOST} 指定数据库所在的主机地址
# -q 表示使用安静模式,减少输出信息
# -R 表示备份存储过程和函数
# --databases ${DATABASE} 表示备份的数据库
# | 管道符,将 mysqldump 的输出传递给下一个命令
# gzip 用于压缩输出的 SQL 文件
# > 重定向操作符,将压缩后的文件存储到指定的备份目录中
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
# 将文件处理成 tar.gz
# cd ${BACKUP} 切换到备份目录
cd ${BACKUP}
# tar 命令用于打包文件和目录
# -z 表示使用 gzip 进行压缩
# -c 表示创建新的压缩包
# -v 表示显示详细信息
# -f 表示指定压缩包的名称
# $DATETIME.tar.gz 是要创建的压缩包的名称
# ${DATETIME} 是要打包的目录
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# 删除对应的备份目录
# rm -rf 命令用于删除文件和目录,-r 表示递归删除,-f 表示强制删除
rm -rf ${BACKUP}/${DATETIME} 这个脚本的团体功能是备份 MySQL 数据库。具体步骤如下:
[*]首先,定义了一些变量,包括备份目录 BACKUP、当前时间 DATETIME、数据库主机 HOST、数据库用户名 DB_USER、数据库密码 DB_PW 和要备份的数据库 DATABASE。
[*]检查并创建备份目录。使用 [! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" 确生存储备份的目录存在,如果不存在则创建它。
[*]使用 mysqldump 下令备份数据库。它将数据库的内容输出,通过管道通报给 gzip 举行压缩,并将压缩后的文件存储在 ${BACKUP}/${DATETIME}/$DATETIME.sql.gz 中。
[*]切换到备份目录,使用 tar 下令将备份目录打包为 tar.gz 文件,以方便存储和传输。
[*]最后,使用 rm -rf 下令删除之前创建的备份目录,只保留最终的 tar.gz 文件。
需要留意的是:
[*]该脚本中的数据库密码是以明文形式存储的,在安全要求较高的环境中,这样的做法大概存在安全隐患,可以考虑使用环境变量或其他更安全的方式存储密码。
[*]确保 mysqldump 下令在体系中可用,并且用户具有足够的权限访问数据库。
[*]在使用 rm -rf 删除目录时要小心,由于它会逼迫删除文件和目录,大概会导致误删紧张数据,建议在使用前举行测试。
#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#数据库的主机(地址)
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=*********
#备份的数据库名
DATABASE=wujiao1
#创建备份目录,如果不存在,就创建
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf.{} \;
echo "备份数据库${DATABASE} 成功~" https://i-blog.csdnimg.cn/direct/81c4848f7b634df1ac9ed7ee4f305a0b.png
https://i-blog.csdnimg.cn/direct/d2c84fc43a5540b7a5f3e8f62e316117.png
认真复习一下这个案例
这一部门写的时间肯定要留意空格
小结梳理
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]