--作者:飞翔的小胖猪

--创建时间: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-渐入佳境的更多相关文章

  1. 60天shell脚本计划-12/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月23日 --修改时间:2021年3月27日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  2. 60天shell脚本计划-8/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月3日 --修改时间:2021年3月7日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...

  3. 60天shell脚本计划-11/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月18日 --修改时间:2021年3月22日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  4. 60天shell脚本计划-10/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月13日 --修改时间:2021年3月17日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  5. 60天shell脚本计划-9/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年3月8日 --修改时间:2021年3月12日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...

  6. 60天shell脚本计划-6/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月21日 --修改时间:2021年2月25日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  7. 60天shell脚本计划-5/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月16日 --修改时间:2021年2月20日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  8. 60天shell脚本计划-4/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月11日 --修改时间:2021年2月15日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...

  9. 60天shell脚本计划-3/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月6日 --修改时间:2021年2月10日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...

随机推荐

  1. 【webpack4.0】---dev.config.js基本配置(六)

    一.开发环境配置准备 1.创建dev.config.js文件 用来配置开发环境的代码 2.安装webpack-merge cnpm install webpack-merge -D 用来合并webpa ...

  2. python02day

    回顾 1.编译型和解释型 编译型:一次性编译成二进制,再执行 执行效率高,但不能跨平台,开发效率低 代表语言:C 解释型:逐行解释成二进制,再执行 可以跨平台,开发效率高,但执行效率低 代表语言:py ...

  3. VUE3 之 插槽的使用 - 这个系列的教程通俗易懂,适合新手

    1. 概述 非理性定律告诉我们: 人们总是习惯于以情感去判断眼前的事物,非理性的去做决定. 对于长远的利益,人们更愿意去选择短期的利益. 因此在做决定前要让自己冷静,理性的分析,让自己看的更远. 言归 ...

  4. 学习MyBatis必知必会(2)~MyBatis基本介绍和MyBatis基本使用

    一.MyBatis框架基本介绍: 1.认识 MyBatis: MyBatis 是支持普通 SQL 查询,存储过程和高级映射的持久层框架,严格上说应该是一个 SQL 映射框架. 其前身是 iBatis, ...

  5. AGC005 部分简要题解

    E 首先注意到这个问题事实上非常复杂(两棵树上博弈),基础的转化无效,于是考虑简化情形. 手玩很多样例可以发现,似乎很容易出现无限循环的情况,进一步地,有观察: 若第一棵树上存在相邻点 \(u, v\ ...

  6. Spring @Cacheable 缓存不生效的问题

    最近在项目中使用了Ehcache缓存,使用方式是用Spring提供的 @Cacheable 注解的方式,这种方式简单.快速.方便,推荐使用. 在使用的过程中,遇到了缓存不生效的情况,经过分析处理,总结 ...

  7. foreEach 跳出循环

    const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; const _ = require('lodash'); let outArr = []; try { arr. ...

  8. argc 和 argv

    转载请注明来源:https://www.cnblogs.com/hookjc/ 如果用C寫一般的命令列工具,常透過main函式的argc,argv來取得使用者所輸入的命令參數.int main(int ...

  9. vagrant的box哪里下?镜像在哪儿找?教你在vagrant官网下载各种最新.box资源

    原文:vagrant的box哪里下?镜像在哪儿找?教你在vagrant官网下载各种最新.box资源 一.进入vagrant官网 https://www.vagrantup.com/ 二.点击findb ...

  10. iOS UIWebView与JavaScript的交互 相关资料

    UIWebView自适应宽度 iOS UIWebView中javascript与Objective-C交互.获取摄像头 iOS中JavaScript和OC交互 iOS与js交互,获取webview完整 ...