60天shell脚本计划-7/12-渐入佳境
--作者:飞翔的小胖猪
--创建时间:2021年2月26日
--修改时间:2021年3月2日
说明
每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。
每篇文章包含5个脚本。
总进度:7/12
上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14415847.html
下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14495999.html
主要内容
21年2月26日-mariadb忘记密码修改脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
执行脚本进行maraidb数据库root密码重置,用在普通密码忘记的情况下,在自动化环境中可以把脚本中多次确认的语句删除掉就可以实现不用确认的密码重置。
需要重启数据库哟,请谨慎使用,只适用于yum方式安装的mariadb数据库。
文件说明
forget_mysql_password.sh:脚本主体文件
脚本主体
[root@135 31_forget_mysql_password]# cat forget_mysql_password.sh
#!/bin/bash
#判断是否有配置文件,支持手动输入和默认值
check_file(){
#定义一个时间用来给备份的配置文件命名.
file_name=`date +"%Y-%m-%d-%H-%M"` echo "判断是否有my.cnf文件"
read -p "请输入Mysql数据库配置文件路径,默认为/etc/my.cnf: " file_dir
if [ ! ${file_dir} ];then
file_dir="/etc/my.cnf"
echo -e "\033[31m用户未输入,文件路径: \033[35m${file_dir}\033[0m" else
echo -e "\033[32m用户已经输入,文件路径: \033[35m${file_dir}\033[0m"
fi if [ ! -f ${file_dir} ];then
echo -e "\033[31m文件${file_dir}不存在,请确认路径是否正确,程序将退出!!!\033[0m"
exit
else
echo -e "\033[32m配置文件${file_dir}路径是正确的。将对文件进行备份。\033[0m"
cp -rp ${file_dir} ${file_dir}_${file_name}.bak &>/dev/null
if [ -f ${file_dir}_${file_name}.bak ];then
echo -e "\033[32m配置文件备份成功。文件名为${file_dir}_${file_name}.bak\033[0m"
else
echo -e "\033[31m配置文件备份失败。程序将退出。\033[0m"
fi
fi
} #修改mariadb密码
edit_password_8(){
echo "修改my.cnf文件在其中添加内容" edit_file=${file_dir} #由于不确定语句是添加对了地方,起手先把对应的行给加上#
sed -i 's/\(skip-grant-tables*\)/#\1/g' ${edit_file} #skip-grant-tables命令只能加到[mysqld]下,使用sed在[mysqld]下一行添加数据.
sed -i '/\[mysqld\]/a skip-grant-tables' ${edit_file} #重启mariadb软件。
systemctl restart mariadb &> /dev/null
if [ $? -eq 0 ];then
echo -e "\033[32m添加skip-grant-tables行后,软件重启成功。\n进行密码修改。\033[0m"
else
echo -e "\033[31m添加skip-grant-tables行后,软件重启失败,程序将退出。\033[0m"
exit 66
fi #默认重置的密码为
mysql -uroot mysql -e "update user set password=password("12345678") where user='root';"
mysql -uroot mysql -e "update user set authentication_string=password("12345678") where user='root';" #删除skip-grant-tables行内容 echo -e "root重置密码命令执行完成,现在删除skip-grant-tables行"
sed -i '/skip-grant-tables/d' ${edit_file} echo "开始重置密码后重启数据。"
systemctl restart mariadb
if [ $? -eq 0 ];then
echo -e "\033[32mroot密码重置完成,默认密码为12345678,请手动登录尝试。\033[0m"
else
echo -e "\033[31m数据库启动失败,详细信息自己查谢谢。哈哈!!!!\033[0m"
exit 66
fi } #定义主函数
main(){
echo -e "\033[36m\n--------运行一键修重置Mariadb root用户密码程序.\033[0m--------\n" read -p "重置密码需要重启数据库,请再次确认。 yes/y 继续执行,不输入或输入其他字符则退出程序: " notarize
a_key=${notarize:-null}
if [ ${a_key} == "yes" ] || [ ${a_key} == "YES" ] || [ ${a_key} == "y" ] ;then
echo -e "\033[31m用户选择继续进行密码重置,程序继续运行。\033[0m"
else
echo -e "\033[31m用户选择不继续进行密码重置,程序退出。\033[0m"
exit 55
fi check_file
edit_password_8 echo -e "\033[36m\n--------程序完成--------\033[0m\n"
} #调用主函数执行
main
结果
执行结果

文件备份

**************************************************************************************************************2021年2月26日脚本结束*****************************************************************************************************************
21年2月27日-安装mysql rpm脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
j通过互联网下载mysql软件,或者手动下载到自定义的路径,执行脚本完成安全。脚本只适用于centos及rhel系列操作系统。
文件说明
auto_install_mysql_rpm.sh:脚本主体文件
脚本主体
[root@135 32_auto_install_mysql_rpm]# cat auto_install_mysql_rpm.sh
#!/bin/bash
#一键安装mysql数据库通过rpm的方式。该脚本使用的版本为8.0.20
download_rpm(){
#下载mysql的rpm包。用户也可以自己手动下载放在指定路径
mkdir /opt/auto_install_mysql/download/rpm/ -p for i in 'https://cdn.mysql.com/archives/mysql-8.0/mysql-community-server-8.0.20-1.el8.x86_64.rpm' 'https://cdn.mysql.com/archives/mysql-8.0/mysql-community-client-8.0.20-1.el8.x86_64.rpm' 'https://cdn.mysql.com/archives/mysql-8.0/mysql-community-devel-8.0.20-1.el8.x86_64.rpm' 'https://cdn.mysql.com/archives/mysql-8.0/mysql-community-common-8.0.20-1.el8.x86_64.rpm' 'https://cdn.mysql.com/archives/mysql-8.0/mysql-community-libs-8.0.20-1.el8.x86_64.rpm'
do
echo "字符串位:$i"
soft_name=`echo "${i}" |awk -F'/' '{printf $NF}'`
if [ -f /opt/auto_install_mysql/download/rpm/${soft_name} ];then
echo -e "\033[31m${soft_name}文件已经存在不用下载。\033[0m"
continue
else
echo -e "\033[32m开始下载软件:${soft_name}\033[0m"
wget ${i} -P /opt/auto_install_mysql/download/rpm/
fi
echo "开始下一次."
done
} install_mysql(){
#判断是否有mysql如果有则退出不安装。
echo -e "\033[32m安装mysql软件\033[0m"
#安装mysql软件,用户自己输入路径如果没输入路径则默认使用/opt/auto_install_mysql/download/rpm/路径。 #判断是否有mariadb,如有提示用户将要删除mairadb所有的内容。写一个确认选项。 dir_name=${dir_file:-/opt/auto_install_mysql/download/rpm/}
echo -e "路径为:\033[31m${dir_name}\033[0m"
echo -e "\033[35m检测系统中是否存在该软件路径目录。\033[0m"
if [ -d $dir_name ];then
echo -e "\033[32m接收到的路径存在于系统中,正常。\033[0m"
else
echo -e "\033[31m目录不存在,请确认。程序退出!!\033[0m"
exit 77
fi #检测目录下是否存在对应的文件,少一个都不行。
if ls -l ${dir_name} | grep -i 'mysql-community-client' &>/dev/null;then
client_e=0
echo -e "\033[36mclient文件存在可用。\033[0m"
else
client_e=1
echo -e "\033[31mclient文件不存在。\033[0m"
fi if ls -l ${dir_name} | grep -i 'mysql-community-common' &>/dev/null;then
common_e=0
echo -e "\033[36mcommon文件存在可用。\033[0m"
else
common_e=1
echo -e "\033[31mcommon文件不存在。\033[0m"
fi if ls -l ${dir_name} | grep -i 'mysql-community-devel' &>/dev/null;then
devel_e=0
echo -e "\033[36mdevel文件存在可用。\033[0m"
else
devel_e=1
echo -e "\033[31mdevel文件不存在。\033[0m"
fi if ls -l ${dir_name} | grep -i 'mysql-community-libs' &>/dev/null;then
libs_e=0
echo -e "\033[36mlibs文件存在可用。\033[0m"
else
libs_e=1
echo -e "\033[31mlibs文件不存在。\033[0m"
fi if ls -l ${dir_name} | grep -i 'mysql-community-server' &>/dev/null;then
server_e=0
echo -e "\033[36mserver文件存在可用。\033[0m"
else
server_e=1
echo -e "\033[31mserver文件不存在。\033[0m"
fi if [ ${client_e} -eq 1 ] || [ ${common_e} -eq 1 ] || [ ${devel_e} -eq 1 ] || [ ${libs_e} -eq 1 ] || [ ${server_e} -eq 1 ];then
echo -e "\033[31m文件不完整,请检查后再执行,程序退出。\033[0m"
exit 55
fi #卸载mariadb相关的软件
echo -e "\033[35m卸载系统中已存在的mariadb相关软件.\033[0m"
yum remove mariadb* -y &>/dev/null rm -rf /var/lib/mysql &>/dev/null echo -e "\033[32m处理mariadb相关软件完成.\033[0m"
echo -e "\033[35m进行软件安装..............\033[0m" yum localinstall ${dir_name}/mysql-community-common* -y &>/dev/null
yum localinstall ${dir_name}/mysql-community-libs* -y &>/dev/null
yum localinstall ${dir_name}/mysql-community-devel* -y &>/dev/null
yum localinstall ${dir_name}/mysql-community-client* -y &>/dev/null
yum localinstall ${dir_name}/mysql-community-server* -y &>/dev/null
echo -e "\033[32m软件安装完成..............\033[0m"
} #初始化mysql
init_mysql(){
#开机启动数据库
systemctl enable mysqld &> /dev/null #启动数据库
systemctl restart mysqld &> /dev/null #获取密码
mysql_passwd=`awk -F':' '/password is generated/{print $NF}' /var/log/mysqld.log |sed 's/\ //g'|tail -1` echo -e "\033[33m默认的密码为:\033[31m${mysql_passwd}\033[0m"
echo -e "\033[32m安装完成。\033[0m"
} main(){
echo -e "\033[31m"
read -p "选择是否需要下载软软件,输入YES/yes/y下载软件,默认不下载:" notarize
echo -e "\033[0m"
a_key=${notarize:-null}
if [ ${a_key} == "yes" ] || [ ${a_key} == "YES" ] || [ ${a_key} == "y" ] ;then
echo -e "\033[31m进行软件下载。\033[0m"
download_rpm
fi echo -ne "\033[33m"
read -p "不进行软件下载直接安装,请输入软件所在路径,默认在 /opt/auto_install_mysql/download/rpm/路径下: " dir_file
echo -e "\033[0m"
install_mysql
init_mysql
} main
结果

**************************************************************************************************************2021年2月27日脚本结束*****************************************************************************************************************
21年2月28日-显示时间脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
脚本主要展示使用tput命令定义输出格式,tput详细用法见:https://www.cnblogs.com/Pigs-Will-Fly/p/14459964.html。
文件说明
Dynamic_clock.sh:脚本主体文件
脚本主体
[root@135 33_Dynamic_clock]# cat Dynamic_clock.sh
#!/bin/bash
tput civis
while [ 1 ]
do
tput clear
tput cup 3 10
tput setb 0
tput setf 2
echo -e "\e[1;31m$(date "+%Y-%m-%d %H:%M:%S %A")\e[0m"
sleep 1
done
结果

**************************************************************************************************************2021年2月28日脚本结束*****************************************************************************************************************
21年3月1日-国际象棋棋盘打印脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
打印国际象棋方块,这个脚本是抄袭的嘻嘻。
文件说明
print_checkerboard.sh:脚本主体文件
脚本主体
[root@135 34_print_checkerboard]# cat print_checkerboard.sh
#!/bin/bash
for i in {1..8}
do
for j in {1..8}
do
sum=$[i+j]
if [ $[sum%2] -eq 0 ];then
echo -ne "\033[46m \033[0m"
else
echo -ne "\033[47m \033[0m"
fi
done
echo
done
结果

**************************************************************************************************************2021年3月1日脚本结束*****************************************************************************************************************
21年3月2日-双色球模拟脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
模拟双色球生成号码,判断是否中奖,可以手动输入也自选数字。
自选功能还待完善,等几天加上来。顺便提一句还是安心上班吧,买彩票的机会太小。
文件说明
Lottery_generator.sh:脚本主体文件
脚本主体
[root@135 35_Lottery_generator]# cat Lottery_generator.sh
#!/bin/bash
#生成6个红色地址,1个蓝色地址。
function genNumbers() {
#定义球池:红球为1-33、蓝球为1-16
redballs=({1..33})
blueballs=({1..16}) #循环生成,6个红色号码,每生成一个不为空的数字,则从红球池数组中取消对应的下标值。
while :
do
#循环判断剩余数组的个数如果等于27,表示已经生成了6个红球可以退出了。
[ ${#redballs[@]} -eq 27 ] && break
#使用$RANDOM函数生成一个随机数取余,得到0-32的数字。
rindex=$[ $RANDOM%33 ]
#因为生成的随机数可能重复,那么通过该值下标取到的数就是空值。 如果判断通过下标取到的值不为空那么输出该数字,同时取消掉对应下标的值。
[ -n "${redballs[${rindex}]}" ] && echo -ne "\e[31m${redballs[${rindex}]}\e[0m " && unset redballs[${rindex}]
done
#当6个红色号码生成过后,生成一个0-15的数。
bindex=$[ $RANDOM%16 ]
#通过获取到0-15的下标,带入到蓝色球池中获取数值。
echo -e "\e[34m${blueballs[$bindex]}\e[0m"
} #自定义彩票号码
function Custom_number(){
n=0
while :
do
#判断数组个数是否为6个,如果满足6个则退出。
[ ${#readnum[@]} -eq 6 ] && break
echo -e "\e[31m"
read -p "输入第 $[n+1] 个数: " readnum[$n] if [ ${readnum[$n]} -lt 0 ] || [ ${readnum[$n]} -gt 33 ];then
continue
fi #设置下标加1
let n=$[$n+1]
done
echo -e "\e[31m红色球选择完成。\e[0m"
echo -e "\e[34m" #填入蓝色球
while :
do
read -p "请输入你想要填入的蓝色球:" read_blue_i
read_blue=${read_blue_i:-18}
[ ${read_blue} -lt 17 ] && [ ${read_blue} -gt 0 ] && break
done
echo -e "\e[0m" echo -e "\e[33m选择的球为:\e[31m ${readnum[*]} \e[34m ${read_blue}\e[0m"
} #对比生成的数字
diff_num(){
customers=($(genNumbers))
backGround=($(genNumbers))
echo "你的号码:${customers[*]}"
if [[ ${customers[6]} == ${backGround[6]} ]];
then
i=0
flag=0 while [ $i -le 5 ]
do
j=0
while [ $j -le 5 ]
do
c=${customers[${i}]}
b=${backGround[${j}]}
[[ "$c" == "$b" ]] && let flag++
let j++
done
let i++
done
[ $flag -le 2 ] && echo "恭喜你!你中了六等奖,奖金 5元 !"
[ $flag -eq 3 ] && echo "恭喜你!你中了五等奖,奖金 10元 !"
[ $flag -eq 4 ] && echo "恭喜你!你中了四等奖,奖金 200元 !"
[ $flag -eq 5 ] && echo "恭喜你!你中了三等奖,奖金 3000元 !"
[ $flag -eq 6 ] && echo "恭喜你!!!!!!!!!!你中了一等奖,奖金 500万元 !"
else
i=0
flag=0
while [ $i -le 5 ]
do
j=0
while [ $j -le 5 ]
do
c=${customers[${i}]}
b=${backGround[${j}]}
[[ "$c" == "$b" ]] && let flag++
let j++
done
let i++
done [ $flag -le 3 ] && echo "很遗憾!你没有中奖!!"
[ $flag -eq 4 ] && echo "恭喜你!你中了五等奖,奖金 10元 !"
[ $flag -eq 5 ] && echo "恭喜你!你中了四等奖,奖金 200元 !"
[ $flag -eq 6 ] && echo "恭喜你!你中了二等奖,奖金 300万元 !"
fi
echo "开奖结果:${backGround[*]}"
} diff_num
结果

**************************************************************************************************************2021年3月2日脚本结束*****************************************************************************************************************
60天shell脚本计划-7/12-渐入佳境的更多相关文章
- 60天shell脚本计划-12/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月23日 --修改时间:2021年3月27日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-8/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月3日 --修改时间:2021年3月7日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
- 60天shell脚本计划-11/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月18日 --修改时间:2021年3月22日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-10/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月13日 --修改时间:2021年3月17日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-9/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月8日 --修改时间:2021年3月12日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-6/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月21日 --修改时间:2021年2月25日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-5/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月16日 --修改时间:2021年2月20日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-4/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月11日 --修改时间:2021年2月15日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-3/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月6日 --修改时间:2021年2月10日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
随机推荐
- STC8H开发(八): NRF24L01无线传输音频(对讲机原型)
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- docker 安装遇到404 not find
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce/repodata/repomd.xml: [Errno 14] HTTPS E ...
- java中的数组 和 封装
package com.aaa.zxf; /** * 一. 普通java项目 导入测试类的方法. * ideal 中 java 项目中导入测试类的方法 手动写入 * import org.junit. ...
- AI 智能写情诗、藏头诗
一.AI 智能情诗.藏头诗展示 最近使用PyTorch的LSTM训练一个写情诗(七言)的模型,可以随机生成情诗.也可以生成藏头情诗. 在特殊的日子用AI生成一首这样的诗,是不是很酷!下面分享下AI 智 ...
- urlencode编码与urldecode解码
转载请注明来源:https://www.cnblogs.com/hookjc/ <script type="text/javascript"><!--functi ...
- attachEvent
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java泛型T与?
感谢大佬:http://m.mamicode.com/info-detail-2657551.html 一.区别 单独的T 代表一个类型 ,而 Class<T>代表这个类型所对应的类, C ...
- onclick="func()"和 onclick = "return func()"区别
onclick="func()" 表示只会执行 func , 但是不会传回 func 中之回传值onclick = "return func()" 则是 执行 ...
- Docker consul的容器服务更新与发现(超详细配图)
Docker consul的容器服务更新与发现 1.概述 2.部署 1.概述: (1)什么是服务注册与发现: 服务注册与发现是微服务架构中不可或缺的重要组件.起初服务都是单节点的,不保障高可用性,也不 ...
- 03.python语法入门--注释、变量
注释 """多行注释加在整个py文件的开头用来对该py文件进行一个整体性的说明通常一个py中只有一个多行注释"""# 这是一行贼溜的代码p ...