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

相关推荐
IT_陈寒2 小时前
SpringBoot多环境配置把我坑惨了,这个踩坑经验你最好看看
前端·人工智能·后端
码事漫谈2 小时前
DeepSeek 搞了个 "Super-agent",但不是超级智能
后端
吴凡wudianmei2 小时前
从 0 搭一个 AI Agent(四):SSE 跑通之后,三处“契约错配”与它们的修复边界
前端·后端·aigc
小兔子2 小时前
defer 的参数在写下那一刻就求值了,循环里这样写会踩坑
后端
苍何2 小时前
腾讯 Buddy One 来了,办公生态一键打通 WorkBuddy(附教程)
后端
Tokenfree2 小时前
把通义千问接进工单系统:三个版本够用,但有两个坑没人提前告诉我
后端
wei_shuo2 小时前
MongoDB迁移实战:基于SQL的文档数据开发与多模态融合实践
后端
小兔子3 小时前
os.path.join 遇到绝对路径会丢掉前面所有段,这条规则写在文档第二句
后端
小兔子3 小时前
Go 的接口是类型加值,所以赋了 nil 的 err 判断起来不等于 nil
后端
不一样的少年_3 小时前
不花一分额外 API 钱,用现成的 Claude Code / Codex / Cursor 搭建 AI 个人知识库
前端·后端·ai编程