shigen的一些shell脚本分享

shigen日更文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。
最近遇到了项目的基础服务老是挂掉了,决定用shell脚本去治理一下。于是,我也看到了我在去年学习的shell脚本的笔记和实战的案例,很多都是shigen自己写的,在这里分享给大家,希望能带大家巩固基础,提供对于效率脚本的参考。
🧑‍💻🧑‍💻注意:

  1. 以上的脚本适用于:centos7系列、macos系列
  2. 统一约定shell的脚本解释器为bash

从基础开始

如何在控制台输出一句话,让脚本暂停

bash 复制代码
 echo '开始.....'
 sleep 10
 echo '结束.....'

输出服务器时间

输出的时间已经格式化成:yyMMdd-HHMMSS

perl 复制代码
 #!/bin/bash
 ​
 echo "current time; `date +%y%m%d-%H%M%S`"

生成1-10的序列

bash 复制代码
 # !/bin/bash
 time
 for i in {1..10}
 do
   str1=`seq -s ":" 10`
   echo "${str1}"
 done  

shell函数

javascript 复制代码
 # !/bin/bash
 ​
 shigen(){
   echo "nice to mett you"
 }
 ​
 shigen

特殊参数变量

bash 复制代码
 #!/bin/bash
 ​
 # $0 获得脚本文件名以及脚本路径
 # $n 获得脚本的第n个参数
 # $# 获得参数总个数
 # $* 脚本的所有参数
 # $@ 所有参数独立成字符串
 ​
 echo "shell name: $0"
 for var in "$@"
 do
   echo "$var"
 done
 echo "shell args: $* shell args len: $#"  

特殊状态变量

bash 复制代码
 # !/bin/bash
 ​
 echo "current id: $$"
 echo "last id: $!"
 ​
 # 参数个数不为2,返回119
 [ $# -ne 2 ] && {
   echo "must have two args"
   exit 119
 }
 echo "no problem"

1-100的和

bash 复制代码
 #!/bin/bash
 ​
 sum=0
 i=1
 until [ $i -gt 100 ]; do
   sum=$(($sum + $i))
   let i++
 done
 ​
 echo "sum: $sum"

实战

jenkis自动化部署java服务脚本

bash 复制代码
 #!/bin/bash
 # jenkins shell script to deploy the java project
 ​
 echo '------start deployment--------'
 echo "java -version && mvn -version"
 ​
 mvn clean install -DskipTests
 ​
 DATE="$(date +%y%m%d-%H%M%S)"
 APP_NAME="wx-develop"
 APP_PORT="8088"
 HARBOR_DOMIAN="xx.xx.xx.xx"
 ​
 TAG="$APP_NAME:$DATE"
 docker build -t $TAG -f Dockerfile .
 ​
 docker login $HARBOR_DOMIAN
 ​
 NEW_TAG="$HARBOR_DOMIAN/test/$TAG"
 docker tag $TAG $NEW_TAG
 docker push $NEW_TAG
 echo "$TAG uploaded successfully"
 ​
 docker run -d --name $APP_NAME-$DATE -p $APP_PORT:$APP_PORT $NEW_TAG
 ​
 echo "Successfully started"

一键安装jdk8

bash 复制代码
 #!/bin/bash
 ​
 jdk_install() {
   # 1. 下载对应的压缩包
   yum install -y wget
   wget -nc https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.tar.gz
   echo "jdk package installed"
   # 2. 创建安装目录
   mkdir /usr/local/java/
   # 解压到新建目录
   tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/java/
   # 3. 配置写入文件
   cat >> /etc/profile << "EOF"
   ========jdk env config=========
   export JAVA_HOME=/usr/local/java/jdk1.8.0_181
   export JRE_HOME=${JAVA_HOME}/jre
   export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
   export PATH=${JAVA_HOME}/bin:$PATH
   EOF
 ​
   # 4. 使环境变量生效
   source /etc/profile
   java -version && javac -version
   if [ $? -ne 0 ]; then
     echo "jdk installed failed"
     exit 1
   else
     jdk_home=$(whereis java)
     echo "jdk installed successfully, now enjoy, jdk_home: $jdk_home"
   fi
 }
 ​
 jdk_install
 ​

一键化系统监控

bash 复制代码
 #!/bin/bash
 ​
 LOG_BASE_PATH=/var/log/server-status
 CURRENT_DATE=$(date "+%Y-%m-%d")
 ​
 get_server_status() {
   CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
   IP_ADDR=$(ifconfig eth0 | awk -F ' ' 'NR==2{print $2}')
   DISK_INFO=$(df -h | grep '^/dev/' | awk '{print $3, $5}')
   MEM_INFO=$(free -h | awk 'NR==2{print $NF}')
 ​
   DOCKER_SERVER=$(docker ps | awk 'NR!=1,NF==NF{print $NF}' | wc -l)
   if [ $DOCKER_SERVER -ne 2 ]; then
     CONCLUSION="docker自定义服务未启动"
   else
     CONCLUSION="docker自定义服务运行正常"
   fi
   # 创建日志文件
   if [ ! -d $LOG_BASE_PATH ]; then
     mkdir -p $LOG_BASE_PATH
   fi
 ​
   [ ! -f $LOG_BASE_PATH ] && touch $LOG_BASE_PATH || echo $LOG_BASE_PATH
   echo "统计时间: $CURRENT_TIME" >>$LOG_BASE_PATH
   echo "机器ip: $IP_ADDR" >>$LOG_BASE_PATH
   echo "磁盘情况: $DISK_INFO" >>$LOG_BASE_PATH
   echo "内存情况: $MEM_INFO" >>$LOG_BASE_PATH
   echo "docker服务: $CONCLUSION" >>$LOG_BASE_PATH
 }
 ​
 mail() {
   get_server_status
   cat $LOG_BASE_PATH
 }
 ​
 mail

希望以上shigen积累和用到的脚本能给大家带来帮助,当然只是一部分,还有其他的很多效率脚本来不及整理和分享。正如我的一个运维伙伴所说:具体的脚本还得看业务情况。

欢迎伙伴们也分享自己的脚本,或者需要的脚本。


以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。同时,shigen在多个平台都有文章的同步,也可以同步的浏览和订阅:

平台 账号 链接
CSDN shigen01 shigen的CSDN主页
知乎 gen-2019 shigen的知乎主页
掘金 shigen01 shigen的掘金主页
腾讯云开发者社区 shigen shigen的腾讯云开发者社区主页
微信公众平台 shigen 公众号名:shigen

shigen一起,每天不一样!

相关推荐
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
枫叶_v4 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
杜杜的man5 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
java小吕布5 小时前
Java中Properties的使用详解
java·开发语言·后端
2401_857610036 小时前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
杨哥带你写代码8 小时前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_8 小时前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端
背水8 小时前
初识Spring
java·后端·spring
晴天飛 雪9 小时前
Spring Boot MySQL 分库分表
spring boot·后端·mysql
weixin_537590459 小时前
《Spring boot从入门到实战》第七章习题答案
数据库·spring boot·后端