--作者:飞翔的小胖猪

--创建时间:2021年3月8日

--修改时间:2021年3月12日

说明

每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。

每篇文章包含5个脚本。

总进度:9/12

上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14495999.html

下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14539999.html

主要内容

21年3月8日-加解密脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

使用xxd+bc+dc实现字符串的加密解密,只适用于英文和数字,中文不支持。

文件说明

custome_encrypt_string.sh:脚本主体文件

脚本主体

[root@135 41_custome_encrypt_string]# cat custome_encrypt_string.sh
#!/bin/bash
#自定义一个简单的一键加密解密的命令,并封装成一个命令。 #加密
encrypt(){
echo -e "\e[32m进行加密操作...................\e[0m"
input_string=$1
echo -e "\e[34m原字符串:\e[33m ${input_string}\e[0m"
en_string=`echo "ibase=16; $(echo "${input_string}" |xxd -ps -u)" |bc`
echo "原字符串:${input_string} 加密结果:${en_string}" >> .secure_string
echo -e "\e[34m加密结果:\e[33m ${en_string}\e[0m ,信息已经保存到文件中。"
} #解密
decryption(){
#解密必须是数字,可以参考之前我判断字符串类型的脚本进行处理在https://www.cnblogs.com/Pigs-Will-Fly/p/14399775.html中第二脚本。
echo -e "\e[32m进行解密操作...................\e[0m"
input_string=$1
echo -e "\e[34m原字符串:\e[33m ${input_string}\e[0m"
#echo -e "${1}P"
Decrypted_string=`dc -e ${1}P`
echo -e "\e[34m解密结果:\e[33m ${Decrypted_string}\e[0m。"
} #判断条件是否满足
check_env(){
if which bc &>/dev/null;then
let bc_r=0
else
let bc_r=1
echo -e "\e[31m bc软件不存在,请先安装。\e[0m"
fi if which xxd &>/dev/null;then
let xxd_r=0
else
let xxd_r=1
echo -e "\e[31m xxd软件不存在,请先安装。\e[0m"
fi if which dc &>/dev/null;then
let dc_r=0
else
let dc_r=1
echo -e "\e[31m dc软件不存在,请先安装。\e[0m"
fi echo -en "\e[34m环境检查结果: \e[0m"
let total_r=${bc_r}+${xxd_r}+${dc_r}
#echo -e "\e[33m环境检查的结果为:${total_r}\e[0m"
if [ ${total_r} -eq 0 ];then
echo -e "\e[32m环境满足要求。\e[0m"
else
echo -e "\e[31m环境不满足要求,无法进行后续操作,请检查相关软件是否存在。\e[0m"
exit 66
fi } #在main函数中判断用户的输入根据输入选择加密还是解密
main(){ #判断函数是否有输入,加密解密选项可选,默认加密。 如果加密字符串不存在则提示命令不对,退出。
input_type=${2:-encrypt}
if [ -z "${1}" ];then
echo -e "\e[31m Not input string。\n \e[33mUsage: input_string [encrypt|decryption]\e[0m"
exit 55
fi #检查系统环境是否满足脚本运行。
check_env #按照不同的操作类型执行相应的操作。
case ${input_type} in
"encrypt")
encrypt $1
;;
"decryption")
decryption $1
;;
*)
echo 'Usage: input_string [encrypt|decryption]'
exit
;;
esac
echo -e "\e[0m"
} main $1 $2

结果

执行结果

文件结果

**************************************************************************************************************2021年3月8日脚本结束*****************************************************************************************************************

21年3月9日-生成ansible role文件结构脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

脚本通过用户键入的应用名,自动生成对应的roles目录结构及调用该roles的playbook文件。

文件说明

gen_ansible_dir_structure.sh:脚本主体文件

脚本主体

[root@135 42_gen_ansible_dir_structure]# cat gen_ansible_dir_structure.sh
#!/bin/bash
#创建roles对应的文件夹结构
create_dir(){
#获取用户输入的的应用名
if [ -z "${1}" ];then
echo -e "\e[31m 没有指定应用名,程序退出了,再见。\e[0m"
exit 44
fi #创建目录
input_dir_name=${1}
mkdir roles/${input_dir_name}/{files,tasks,templates,vars,handlers,meta,default} -p &>/dev/null dir_file=`pwd`
echo -e "\e[34m文件夹创建结果: \e[0m"
cd roles/${input_dir_name}/
if [ -d files ] && [ -d tasks ] && [ -d templates ] && [ -d vars ] && [ -d handlers ] && [ -d meta ] && [ -d default ];then
echo -e "\e[32m目录创建完成。\e[0m"
else
echo -e "\e[31m目录创建失败。具体信息。\033[0m"
exit 33
fi
} create_file(){
input_dir_name=$1 cd ${dir_file}
#判断是否存在文件,存在则提示是否继续,继续则备份原有文件。
if [ -f roles/${input_dir_name}/tasks/main.yml ];then
echo -e "\e[33m main.yml文件已经存在,确认是否继续生成。\e[0m"
read -p "输入Y(继续) / N(退出),默认不继续:" input
chose=${input:-N} #判断用户是否确定继续执行。
if [ "${chose}"=="Y" ];then
echo -e "\e[33m用户选择了继续执行。\e[0m"
cp -rp roles/${input_dir_name}/tasks/main.yml roles/${input_dir_name}/tasks/main.yml.bak &>/dev/null
else
echo -e "\e[31m用户选择不继续执行,程序退出。\e[0m"
exit 22
fi
fi #创建tasks下main.yml文件
echo -e '- include: mode_1.yml\n- include: mode_2.yml\n- include: mode_3.yml' > roles/${input_dir_name}/tasks/main.yml
if [ -f ${input_dir_name}.yml ];then
echo -e "\e[31m同名调用文件已经存在,不创建新的文件,程序退出。\e[0m"
exit 99
fi
echo -e "---\n- hosts: websrvs\n remote_user: root\n roles:\n - ${input_dir_name}" > ${input_dir_name}.yml
echo -e "\e[32m文件结构生成完成。\e[0m"
} main(){
create_dir $1
create_file $1 } main $1

结果

**************************************************************************************************************2021年3月9日脚本结束*****************************************************************************************************************

21年3月10日-画心脚本

************************************************************************************************************************************************************************************************************************************

脚本说明

执行脚本会生成一个爱心图。

文件说明

Draw_the_heart.sh:脚本主体文件

脚本主体

[root@135 43_Draw_the_heart]# cat Draw_the_heart.sh
#!/bin/bash
#画心心
draw_hear(){
y=1.25
yy=46
while [[ yy -gt 0 ]];
do
xx=-120
x=-1.14
while [[ 0 -gt xx ]];
do
cc=$(echo `awk -v a=${x} -v b=${y} 'BEGIN{printf "%.125f\n",a*a+b*b-1}'`)
bb=$(echo `awk -v a=${cc} -v b=${y} -v c=${x} 'BEGIN{printf "%.125f\n",a*a*a-c*c*b*b*b}'`)
ff=$(echo `awk -v a=${bb} 'BEGIN{printf "%.0f\n",a*10000000}'`)
if [[ ff -le 0 ]]; then
printf "\e[1;41m \e[0m"
else
printf " "
fi
x=$(echo `awk -v a=${x} -v b=0.02 'BEGIN{printf "%.125f\n",a+b}'`)
xx=$(echo `awk -v a=${xx} -v b=1 'BEGIN{printf "%.0f\n",a+b}'`)
done
printf "\n"
y=$(echo `awk -v a=${y} -v b=0.05 'BEGIN{printf "%.10f\n",a-b}'`)
yy=$(echo `awk -v a=${yy} -v b=1 'BEGIN{printf "%.0f\n",a-b}'`)
done
} main(){
draw_hear
} main

结果

**************************************************************************************************************2021年3月10日脚本结束*****************************************************************************************************************

21年3月11日-清理/var/log/过期文件夹

************************************************************************************************************************************************************************************************************************************

脚本说明

业务方主机搭建为一个日志服务器,实时的把远端日志传送到本地,按照当前日期生成对应的文件夹如:2021-03-10 ,查找/var/log/中超过185天的以20开头的文件夹并进行删除,把删除记录置入到/var/log/messages文件中。

可以把脚本加入到定时任务中实现每天定时执行。

文件说明

auto_delete_dir.sh:脚本主体文件

脚本主体

[root@135 44_auto_delete_dir]# cat auto_delete_dir.sh
#!/bin/bash
#shows files to be deleted
list_file(){
find /var/log/ -mtime +185 -type d -name "20*" > /opt/auto_clear_log/.temp_dir_name.txt
} #delete dir file
clear_file(){
#判断待删除文件是否为空,如果为空则提示不删除,并把结果置入到/var/log/messages中
if [[ ! -s /opt/auto_clear_log/.temp_dir_name.txt ]];then
echo "`date` not exec clear operation." >> /var/log/messages
#echo -e "\e[31m`date` not exec clear operation.\e[0m"
else
#依次读取待删除文件内容,一条一条的删除。
for i in `cat /opt/auto_clear_log/.temp_dir_name.txt`
do
#echo -e "\e[33m ${i} dir file will delete.\e[0m "
#判断是否删除成功,删除成功则记录到/var/log/messages文件中.
if rm -rf ${i} &> /dev/null;then
echo "`date` ${i} dir_file delete succeed." >> /var/log/messages
#echo -e "\e[33m`date` ${i} dir_file delete succeed.\e[0m"
else
echo "`date` ${i} dir_file delete failed." >> /var/log/messages
#echo -e "\e[31m`date` ${i} dir_file delete failed.\e[0m"
fi
done
fi
} #main function
main(){
list_file
clear_file
} #call main function
main

结果

**************************************************************************************************************2021年3月11日脚本结束*****************************************************************************************************************

21年3月12日-oracle开机启动(简易版)

************************************************************************************************************************************************************************************************************************************

脚本说明

oracle单机数据库开机启动简易版,需要用户自行加入到/etc/rc.d/rc.local文件中,每次开机会生成对应的日志文件置入到/var/log/messages中。

文件说明

oracle_startup.sh:脚本主体文件

脚本主体

[root@135 45_oracle_startup]# cat oracle_startup.sh
#/bin/bash
su - oracle <<EOF
source /home/oracle/.bash_profile
lsnrctl start
export ORACLE_SID=orcl
sqlplus / as sysdba <<EOE
startup
EOE
EOF #check database services status
program_num=0
port_num=0 #check database port
if ss -alntup | grep 1521 &>/dev/null;then
echo "`date` Oracle Database The listener starts normally,1521 Port listening........" >> /var/log/messages
else
port_num=1
echo "`date` Oracle Database The listener starts an exception" >> /var/log/messages
fi #total oracle program num
tmp_program_num=`ps -ef | grep ora_ | grep -v grep | wc -l`
if [ ${tmp_program_num} -gt 5 ];then
echo "`date` Oracle Database process normal." >> /var/log/messages
else
echo "`date` Oracle Database process exception." >> /var/log/messages
program_num=1
fi if [ ${port_num} -eq 1 ] || [ ${program_num} -eq 1 ];then
echo "`date` Oracle Database startup exception." >> /var/log/messages
else
echo "`date` Oracle Database startup success." >> /var/log/messages
fi

结果

**************************************************************************************************************2021年3月12日脚本结束*****************************************************************************************************************

60天shell脚本计划-9/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脚本计划-7/12-渐入佳境

    --作者:飞翔的小胖猪 --创建时间:2021年2月26日 --修改时间:2021年3月2日 说明 每日上传更新一个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. gin中只绑定url查询字符串

    package main import ( "github.com/gin-gonic/gin" "log" ) type Person struct{ Nam ...

  2. 【webpack4.0】---webpack的基本使用(三)

    一.webpack-dev-server 1.安装 cnpm   install  webpack-dev-server  -D 2.作用 开启一个web服务,监听文件的变化并自动刷新网页,做到实时预 ...

  3. Java应用程序OOM分析

    内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用. 内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢 ...

  4. 拒绝编译等待 - 动态研发模式 ARK

    作者:字节跳动终端技术--徐纪光 背景 iOS 业界研发模式多为 CocoaPods + Xcode + Git 的多仓组件化开发模型.为追求极致的研发体验.提升研发效率,对该研发模式进行了大量优化, ...

  5. Dapr Actor 的微服务架构

    Dapr中的Actor模型,和Orleans的Virtual Actor一脉相传, 圣杰写过一篇文章Orleans 知多少 | .NET Core 分布式框架介绍过.简单来讲:Actor模型 = 状态 ...

  6. 解决死锁之路3 - 常见 SQL 语句的加锁分析 (转)

    出处:https://www.aneasystone.com/archives/2017/12/solving-dead-locks-three.html 这篇博客将对一些常见的 SQL 语句进行加锁 ...

  7. js-小知识点

    强类型定义语言和弱类型定义语言1)强类型定义语言: 强制数据类型定义的语言.也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了.举个例子:如果你定义了一个整型 ...

  8. Java-打印杨辉三角

    记录下哈 import java.util.Scanner; public class YangHuiTriangle { public static void main(String[] args) ...

  9. iOS中通过链接地址打开指定APP并传参 by徐文棋

    基于项目需要,有时候需要通过一个链接,或者二维码扫描来直接打开我们所开发的客户端. 当然了.客户端也不仅仅是需要被打开,而且还要跳到相应的页面去,因此这里需要传参. 客户端想用链接打开,必须要在inf ...

  10. rsync 远程同步部署——上下行同步

    rsync 远程同步部署--上下行同步 1.rsync (Remote Sync,远程同步) : 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用 ...