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一起,每天不一样!

相关推荐
llz_1123 小时前
web-第二次课后作业
前端·后端·web
红尘散仙9 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记10 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆10 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪11 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball61611 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_25183645711 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao12 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒13 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
ayqy贾杰14 小时前
基层管理的三板斧,在AI时代行不通了
前端·后端·团队管理