--作者:飞翔的小胖猪
--创建时间: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
************************************************************************************************************************************************************************************************************************************
执行脚本进行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日脚本结束*****************************************************************************************************************
************************************************************************************************************************************************************************************************************************************
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日脚本结束*****************************************************************************************************************
************************************************************************************************************************************************************************************************************************************
脚本主要展示使用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日脚本结束*****************************************************************************************************************
************************************************************************************************************************************************************************************************************************************
打印国际象棋方块,这个脚本是抄袭的嘻嘻。
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日脚本结束*****************************************************************************************************************
************************************************************************************************************************************************************************************************************************************
模拟双色球生成号码,判断是否中奖,可以手动输入也自选数字。
自选功能还待完善,等几天加上来。顺便提一句还是安心上班吧,买彩票的机会太小。
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日脚本结束*****************************************************************************************************************
手机扫一扫
移动阅读更方便
你可能感兴趣的文章