60天shell脚本计划-10/12-渐入佳境
--作者:飞翔的小胖猪
--创建时间:2021年3月13日
--修改时间:2021年3月17日
说明
每日上传更新一个shell脚本,周期为60天。如有需求的读者可根据自己实际情况选用合适的脚本,也可在评论区留言提出脚本需求,作者会尽快根据需求编写相关脚本对功能进行实现。
每篇文章包含5个脚本。
总进度:10/12
上一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14497893.html
下一篇脚本链接:https://www.cnblogs.com/Pigs-Will-Fly/p/14592317.html
主要内容
21年3月13日-安装jdk脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
根据用户输入的jdk二进制文件路径与安装路径,安装配置jdk。
文件说明
install_jdk.sh:脚本主体文件
脚本主体
[root@135 46_install_jdk]# cat install_jdk.sh
#!/bin/bash
#安装jdk
install_jdk(){
#检测文件中是否配置有jdk环境变量,如果有JAVA_HOME设置表示可能已经安装了java,存在则退出
java_num=`cat /etc/profile | grep -i java_home |wc -l`
if [ ! ${java_num} -eq 0 ];then
echo -e "\e[31mJAVA_HOME PATH exits........\e[0m"
exit 22
fi #输入jdk二进制文件路径,判断输入的值是否存在
while :
do
echo -e "\e[31m"
read -p "Please intput jdk bin file : " file_name
echo -e "\e[34mjdk二进制文件路径:\e[33m ${file_name:-not}\e[0m"
if [ -f ${file_name} ];then
echo -e "\e[32m输入文件名正确。\e[0m"
break
else
echo -e "输入的文件路径错误,请核对路径名,绝对路径。"
fi
echo -e "\e[31m"
done #键入指定的安装路径,默认为/usr/local/java/jdkv1/
read -p "Please input install dir : " install_dir
echo -e "\e[34m安装路径:\e[33m ${install_dir:-/usr/local/java/jdkv1/}\e[0m" if mkdir -p ${install_dir:-/usr/local/java/jdkv1/} &>/dev/null;then
echo -e "\e[32m安装路径创建成功。${install_dir}\e[0m"
else
echo -e "\e[31m安装路径创建失败。${install_dir}\e[0m"
fi unzip_file_name=`tar -ztvf ${file_name} |head -2 | awk '{print $6}' | awk -F'/' '{print $1}' |uniq` echo -e "\e[34m解压目录:./${unzip_file_name}\e[0m"
mkdir -p ${unzip_file_name} &> /dev/null
tar -zxvf ${file_name} -C ./ &> /dev/null #复制所有文件至指定安装目录
cp -rp ./${unzip_file_name}/* ${install_dir:-/usr/local/java/jdkv1/} &>/dev/null #添加环境变量
echo "JAVA_HOME=${install_dir:-/usr/local/java/jdkv1/}" >> /etc/profile
echo 'CLASSPATH=.:$JAVA_HOME/lib.tools.jar' >> /etc/profile
echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
echo 'export JAVA_HOME CLASSPATH PATH' >> /etc/profile #执行文件
source /etc/profile
} #检测系统安装是否完成
check_status(){ if java -version &>/dev/null && which java &>/dev/null ;then
echo -e "\e[32m java配置完成。\e[0m"
else
echo -e "\e[31m java配置失败。\e[0m"
exit 66
fi
} main(){
#判断系统中是否存在java
if which java &>/dev/null;then
echo -e "\e[33m系统中已存在java软件,不需要配置。\e[0m"
echo -e "\e[34mJAVA信息:\e[0m"
echo -e "`java -version`"
exit 88
fi
install_jdk
check_status
} main
结果
**************************************************************************************************************2021年3月13日脚本结束*****************************************************************************************************************
21年3月14日-Ubuntu网络配置文件脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
用户输入待配置ip、掩码、dns、网关等信息,执行脚本会自动生成网络配置文件格式,读者可以使用重定向等手段直接把文件写入到指定的路径下。
该脚本至适用于Ubuntu操作系统,切记。
文件说明
Ubuntu_net_configure_example.sh:脚本主体文件
脚本主体
[root@135 47_Ubuntu_net_configure_example]# cat Ubuntu_net_configure_example.sh
#!/bin/bash #定义一些基础配置信息。
NET_NAME="ens33"
DHCP_STATA="yes"
ADDRESS='192.168.111.140'
DNS1="192.168.111.2"
DNS2="114.114.114.114"
GATEWAY="192.168.111.2" #展示16及以下的系统网络配置文件模板
display_file_exp_16(){
echo -e "配置文件路径:\e[34m/etc/network/interfaces\e[0m"
echo -e "配置文件内容:"
if [ ${DHCP_STATA} == "yes" ];then
echo -e "\e[33mauto ${NET_NAME}\niface ${NET_NAME} inet dhcp\e[0m\n"
else
echo -e "\e[33mauto ${NET_NAME}\niface ${NET_NAME} inet static\n address ${ADDRESS}\n netmask 255.255.255.0\n dns-nameservers ${DNS1}\n dns-nameservers ${DNS2}\n gateway ${GATEWAY}\e[0m\n"
fi
} #展示17及以上的系统网络配置文件模板
display_file_exp_17(){
echo -e "配置文件路径:\e[34m/etc/netplan/00-installer-config.yaml\e[0m"
echo -e "配置文件内容:"
if [ ${DHCP_STATA} == "yes" ];then
echo -e "\e[33mnetwork:\n ethernets:\n ${NET_NAME}:\n dhcp4: true\n version: 2\e[0m"
else
echo -e "\e[33mnetwork:\n ethernets:\n ${NET_NAME}:\n dhcp4: no\n addresses: [${ADDRESS}/24]\n gateway4: ${GATEWAY}\n nameservers:\n addresses: [${DNS1},${DNS2}]\n version: 2\e[0m"
fi
} #检测系统版本,根据版本选择指定的函数
check_version(){
version_id=`cat /etc/lsb-release | awk -F"=" '/DISTRIB_RELEASE=/{print $2}' | awk -F'.' '{print $1}'`
if [ ${version_id} -lt 17 ];then
echo -e "\e[31mSystem os version ${version_id}\e[0m"
#调用展示16以以下的网络配置
display_file_exp_16
else
echo -e "\e[31mSystem os version ${version_id}\e[0m"
display_file_exp_17
fi
} #定义主函数
main(){
check_version
echo -e "\e[0m"
} #调用主函数
main
结果
16系统版本执行结果
17以上执行结果
**************************************************************************************************************2021年3月14日脚本结束*****************************************************************************************************************
21年3月15日-安装lvs脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
执行脚本在ubuntu和centos系列操作系统上安装keepalived和ipvsadm软件配置并启动。
读者在使用时请根据实际环境填入虚拟ip、真实节点ip、节点负载端口号信息。
文件说明
install_keepalived_ipvsadm.sh:脚本主体文件
脚本主体
[root@135 48_install_keepalived_ipvsadm]# cat install_keepalived_ipvsadm.sh
#!/bin/bash
#检查判断系统类型,centos使用yum安装、ubuntu使用apt安装。
check_system_type(){
echo -ne "System tyep: " #判断系统是否为centos或redhat
if cat /etc/issue | grep -i kernel &>/dev/null;then
echo -e "\e[34mCentos\e[0m"
install_soft_c
fi #判断系统是否为ubuntu
if cat /etc/issue | grep -i Ubuntu &>/dev/null ;then
echo -e "\e[34mUbuntu\e[0m"
install_soft_u
fi
} #ubuntu操作系统安装软件
install_soft_u(){
echo -e "\e[33m开始进行软件安装......................\e[0m"
apt clean all &>/dev/null
apt update &>/dev/null
apt-cache dump &>/dev/null if apt install ipvsadm keepalived -y &>/dev/null;then
echo -e "\e[32m执行安装成功.\e[0m"
else
echo -e "\e[31mapt configure errr or not keepalived/ipvsadm package,Please check configure.\e[0m"
exit 66
fi
} #centos操作系统安装软件
install_soft_c(){
echo -e "\e[33m开始进行软件安装......................\e[0m"
yum clean all &> /dev/null
yum repolist &> /dev/null
if yum install keepalived ipvsadm -y &>/dev/null;then
echo -e "\e[32m执行安装成功.\e[0m"
else
echo -e "\e[31myum configure errr or not keepalived/ipvsadm package,Please check configure.\e[0m"
exit 66
fi
} #设置net.ipv4.ip_nonlocal_bind = 1
edit_kernel_args(){
echo -e "\e[33m开始修改内核参数......................\e[0m"
sed -i '/net\.ipv4\.ip_nonlocal_bind/d' /etc/sysctl.conf
echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
if sysctl -p | grep -i 'net.ipv4.ip_nonlocal_bind = 1' &>/dev/null;then
echo -e "\e[32m内核参数修改完成.\e[0m"
fi
} #configure keepalived and ipvsadm
configure_file(){
echo -e "\e[33m开始配置keepalived及ipvsadm配置......................\e[0m"
if [ -f /etc/keepalived/keepalived.conf ];then
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
fi #写入内容到配置文件
echo '! Configuration File for keepalived ' >> /etc/keepalived/keepalived.conf
echo ' ' >> /etc/keepalived/keepalived.conf
echo 'global_defs { ' >> /etc/keepalived/keepalived.conf
echo ' router_id lvs.01 ' >> /etc/keepalived/keepalived.conf
echo '} ' >> /etc/keepalived/keepalived.conf
echo ' ' >> /etc/keepalived/keepalived.conf
echo 'vrrp_instance VI_1 { ' >> /etc/keepalived/keepalived.conf
echo ' state MASTER ' >> /etc/keepalived/keepalived.conf
echo ' interface ens33 ' >> /etc/keepalived/keepalived.conf
echo ' virtual_router_id 51 ' >> /etc/keepalived/keepalived.conf
echo ' priority 100 ' >> /etc/keepalived/keepalived.conf
echo ' advert_int 1 ' >> /etc/keepalived/keepalived.conf
echo ' authentication { ' >> /etc/keepalived/keepalived.conf
echo ' auth_type PASS ' >> /etc/keepalived/keepalived.conf
echo ' auth_pass 1111 ' >> /etc/keepalived/keepalived.conf
echo ' } ' >> /etc/keepalived/keepalived.conf
echo ' virtual_ipaddress { ' >> /etc/keepalived/keepalived.conf
echo ' 192.168.111.160/24 ' >> /etc/keepalived/keepalived.conf
echo ' } ' >> /etc/keepalived/keepalived.conf
echo '} ' >> /etc/keepalived/keepalived.conf
echo ' ' >> /etc/keepalived/keepalived.conf
echo 'virtual_server 192.168.111.160 80 { ' >> /etc/keepalived/keepalived.conf
echo ' delay_loop 6 ' >> /etc/keepalived/keepalived.conf
echo ' lb_algo wrr ' >> /etc/keepalived/keepalived.conf
echo ' lb_kind DR ' >> /etc/keepalived/keepalived.conf
echo ' #persistence_timeout 50 ' >> /etc/keepalived/keepalived.conf
echo ' protocol TCP ' >> /etc/keepalived/keepalived.conf
echo ' ' >> /etc/keepalived/keepalived.conf
echo ' real_server 192.168.111.135 80 { ' >> /etc/keepalived/keepalived.conf
echo ' weight 10 ' >> /etc/keepalived/keepalived.conf
echo ' TCP_CHECK { ' >> /etc/keepalived/keepalived.conf
echo ' connect_timeout 10 ' >> /etc/keepalived/keepalived.conf
echo ' retry 3 ' >> /etc/keepalived/keepalived.conf
echo ' delay_before_retry 3 ' >> /etc/keepalived/keepalived.conf
echo ' connect_port 6443 ' >> /etc/keepalived/keepalived.conf
echo ' } ' >> /etc/keepalived/keepalived.conf
echo ' } ' >> /etc/keepalived/keepalived.conf
echo ' ' >> /etc/keepalived/keepalived.conf
echo ' real_server 192.168.111.129 80 { ' >> /etc/keepalived/keepalived.conf
echo ' weight 10 ' >> /etc/keepalived/keepalived.conf
echo ' TCP_CHECK { ' >> /etc/keepalived/keepalived.conf
echo ' connect_timeout 10 ' >> /etc/keepalived/keepalived.conf
echo ' retry 3 ' >> /etc/keepalived/keepalived.conf
echo ' delay_before_retry 3 ' >> /etc/keepalived/keepalived.conf
echo ' connect_port 6443 ' >> /etc/keepalived/keepalived.conf
echo ' } ' >> /etc/keepalived/keepalived.conf
echo ' } ' >> /etc/keepalived/keepalived.conf
echo ' } ' >> /etc/keepalived/keepalived.conf
echo '} ' >> /etc/keepalived/keepalived.conf
if systemctl restart systemctl restart keepalived.service &>/dev/null || service keepalived restart &>/dev/null;then
echo -e "\e[32mkeepalived和ipvsadm安装配置完成,并成功启动。\e[0m"
else
echo -e "\e[31m配置文件存在问题,服务无法启动,请检查。\e[0m"
fi
} #定义主函数
main(){
check_system_type
edit_kernel_args
configure_file
} #调用组函数
main
结果
**************************************************************************************************************2021年3月15日脚本结束*****************************************************************************************************************
21年3月16日-判断闰年脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
用户输入年份脚本判断输入的年份是否为闰年,不输入则判断当前年是否为闰年。
文件说明
determine_leap_year.sh:脚本主体文件
脚本主体
[root@135 49_To_determine_leap_year]# cat determine_leap_year.sh
#!/bin/bash
#输入年份
input_year(){
echo -e "\e[34m"
read -p "Please enter the year you want to query,The default year is this year: " year_i
now_year=`date +%Y`
year=${year_i:-$now_year}
echo -e "检测年份为:\e[33m ${year}"
} #判断是否为闰年
#1.能够被400整除
#2.能够被4整除,但是不能被100整除
check_year(){
let y1=${year}%400
let y2=${year}%100
let y3=${year}%4 echo -ne "\e[34m结果为:\e[32m" #如果能被400整除直接输出是闰年,程序结束
if [ ${y1} -eq 0 ];then
echo -e "闰年.\e[0m\n"
exit 0
fi
#当不能被400整除时,如果能被100整除表示不是闰年,程序结束
if [ ${y2} -eq 0 ];then
echo -e "\e[31m平年.\e[0m\n"
exit 0
fi
#当以上条件都不满足时,如果能被4整除表示是闰年,否则为平年
if [ ${y3} -eq 0 ];then
echo -e "闰年.\e[0m\n"
exit 0
else
echo -e "\e[31m平年.\e[0m\n"
fi
} #定义主函数
main(){
input_year
check_year
} #调用主函数
main
结果
**************************************************************************************************************2021年3月16日脚本结束*****************************************************************************************************************
21年3月17日-质数判断脚本
************************************************************************************************************************************************************************************************************************************
脚本说明
输入一个数字判断是否为质数。
文件说明
prime_Numbers_judgment.sh:脚本主体文件
脚本主体
[root@135 100_shell]# cat prime_Numbers_judgment.sh
#!/bin/bash
#测试质数脚本
check_number(){
read -p "请输入一个数:" num
if [ $num -le 0 ];then #判断这个数是否小于0
echo "您输入的数为负数或0" #echo提示用户
elif [ $num -eq 1 ];then #判断这个数是否为1和2
echo "$num 质数"
elif [ $num -eq 2 ];then
echo "$num 质数"
else #当输入的数是正整数时
for ((i=2;i<$num;i++))
do
if [ $(($num%i)) -eq 0 ];then #判断这个数与i取余是否等于0
[ $num -ne $(($num%i)) ] && echo "$num 非质数" && break
else
if [ $i -gt $(($num/2)) ];then
echo "$num 质数" && break
fi
fi
done
fi
} #定义主函数
main(){
check_number
} #调用主函数
main
结果
**************************************************************************************************************2021年3月17日脚本结束*****************************************************************************************************************
60天shell脚本计划-10/12-渐入佳境的更多相关文章
- 60天shell脚本计划-12/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月23日 --修改时间:2021年3月27日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-11/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月18日 --修改时间:2021年3月22日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可 ...
- 60天shell脚本计划-9/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月8日 --修改时间:2021年3月12日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-8/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年3月3日 --修改时间:2021年3月7日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
- 60天shell脚本计划-7/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月26日 --修改时间:2021年3月2日 说明 每日上传更新一个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脚本计划-3/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月6日 --修改时间:2021年2月10日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在 ...
- 60天shell脚本计划-2/12-渐入佳境
--作者:飞翔的小胖猪 --创建时间:2021年2月1日 --修改时间:2021年2月5日 说明 每日上传更新一个shell脚本,周期为60天.如有需求的读者可根据自己实际情况选用合适的脚本,也可在评 ...
随机推荐
- golang中如何将json文件解析成结构体
package tool import ( "bufio" "encoding/json" "fmt" "os" ) t ...
- nmap 查看主机上开放的端口
作用: 检测网络上的主机检测主机上开放的端口检测操作系统,硬件地址,以及软件版本检测脆弱性的漏洞(Nmap的脚本) 扫描方式: 1. -sS Tcp SYN Scan 不需要三次握手,速度快 ...
- Android Studio如何查看自己设计的数据库
首先点击左上角进入Device File Explorer 进入后 点击data-data 找到你的项目名称 进入后点击你建立的数据库 一步步按照提示进行操作,即可显示你的表
- chapter2 线性回归实现
1 导入包 import numpy as np 2 初始化模型参数 ### 初始化模型参数 def initialize_params(dims): w = np.zeros((dims, 1)) ...
- 微信小程序笔记整理--入门篇。
7-2 微信小程序入门篇 准备篇 1.登录网址,https://mp.weixin.qq.com 注册一个微信小程序. 2.获取微信小程序appid,登录自己的小程序后台,在开发者设置中获得appid ...
- 2.flink
Flink 运行时的组件 作业管理器(JobManager) •控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager 所控制执行. •JobManager 会先接收 ...
- CodeForces 摆烂寄录
按订正顺序排序 现在是乱排的了 完整代码占版面 所以只放 AC 记录链接 Good Bye 2021: 2022 is NEAR 这场打得真拉/tuu A. 简单签到 开场就读错题,浪费 5min / ...
- Swift循环的介绍
循环的介绍 在开发中经常会需要循环 常见的循环有:for/while/do while. 这里我们只介绍for/while,因为for/while最常见 for循环的写法 最常规写法 // 传统写法 ...
- 什么是UIImageView
UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton.UILabel.UIImageView.UITableView等等 UI ...
- 自定义带图片和文字的Button的排版--陈棚
自定义button,动态加载图片与文字 [footView addSubview:btnAllChoose]; [btnAllChoose setTitle:str forState:UIContro ...