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

相关推荐
凡人的AI工具箱2 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
是店小二呀2 小时前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端
canonical_entropy2 小时前
金蝶云苍穹的Extension与Nop平台的Delta的区别
后端·低代码·架构
我叫啥都行3 小时前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
无名指的等待7123 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端
.生产的驴4 小时前
SpringBoot 消息队列RabbitMQ 消费者确认机制 失败重试机制
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
AskHarries5 小时前
Spring Boot利用dag加速Spring beans初始化
java·spring boot·后端
苹果酱05675 小时前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
掐指一算乀缺钱5 小时前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
计算机学姐8 小时前
基于python+django+vue的影视推荐系统
开发语言·vue.js·后端·python·mysql·django·intellij-idea