shell脚本实例

参考:

https://blog.csdn.net/yugemengjing/article/details/82469785

1,备份日志

vim /usr/local/sh_script/logbak.sh
#!/bin/bash
tar -zcvf log-`date +%Y%m%d` /var/log


00 03 * * 5  /usr/local/sh_script/logbak.sh

2,监控内存和磁盘小于给定值时报警

复制代码
#!/bin/bash
# 实时监控本机内存和硬盘剩余空间,剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员

disk_size  = $(df / | awk '/\//{print $4}')
mem_size=$(free | awk '/Mem/{print $4}')

while :
do
# 注意内存和磁盘提取的空间大小都是以 Kb 为单位
if  [  $disk_size -le 512000 -a $mem_size -le 1024000  ]
then
    mail  ‐s  "Warning"  root  <<EOF
    Insufficient resources,资源不足
EOF
fi
done
复制代码

3,检查当前登录用户

复制代码
#!/bin/bash
 
# 检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不
# 是,则提示您非管理员(使用字串对比版本) 
if [ $USER == "root" ] //或者 if [$UID -eq 0]
then
    yum ‐y install vsftpd
else
    echo "您不是管理员,没有权限安装软件"
fi
复制代码

4,编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态

复制代码
#!/bin/bash
# 编写脚本测试 192.168.4.0/254 整个网段中哪些主机处于开机状态,哪些主机处于关机

# 状态(for 版本)
for i in {1..254}
do
# 每隔0.3秒ping一次,一共ping2次,并以1毫秒为单位设置ping的超时时间
ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i &>/dev/null
if [ $? -eq 0 ];then
echo "192.168.4.$i is up"
else
echo "192.168.4.$i is down"
fi

# 状态(while 版本) 
i=1
while [ $i -le 254 ]
do
       ping ‐c 2 ‐i 0.3 ‐W 1 192.168.4.$i  &>/dev/null
       if  [ $? -eq 0 ];then
           echo "192.168.4.$i is up"
    else
           echo  "192.168.4.$i is down"
       fi
       let i++
done
复制代码

5,拷贝脚本显示进度条

复制代码
#!/bin/bash
 
# 编写脚本,显示进度条
jindu(){
while :
do
       echo -n '#'
       sleep 0.2
done
}
jindu &
cp -a $1 $2
killall $0
echo "拷贝完成"
复制代码

6,使用死循环实时显示 eth0 网卡发送的数据包流量

复制代码
#!/bin/bash

while :
do
    echo '本地网卡 eth0 流量信息如下'
    ifconfig eth0|grep "RX pack" |awk '{print $5}'
    ifconfig eth0|grep "RX pack" |awk '{print $5}'
    sleep 1
done
复制代码

 7,golang项目自动拉取打包部署

复制代码
#!/bin/bash

# ---------------- 配置参数 ----------------
APP_NAME="my_go_app"                # 应用名称
GIT_REPO="git@github.com:your_username/your_repo.git"  # Git 仓库地址
GIT_BRANCH="master"                 # Git 分支
WORK_DIR="/home/user/my_go_project"  # 代码存放路径
BUILD_DIR="./build"                  # 构建目录

# 目标服务器列表
SERVERS=(
    "user@server1_ip:/opt/my_go_app"
    "user@server2_ip:/opt/my_go_app"
    "user@server3_ip:/opt/my_go_app"
)
PORT=8080  # 监听端口

# ---------------- 1. 进入工作目录 ----------------
echo "切换到工作目录: ${WORK_DIR}"
cd ${WORK_DIR} || { echo "❌ 目录不存在,退出!"; exit 1; }

# ---------------- 2. 拉取最新代码 ----------------
echo "🚀 拉取最新的代码..."
git checkout ${GIT_BRANCH} && git pull origin ${GIT_BRANCH}
if [ $? -ne 0 ]; then
    echo "❌ Git 拉取代码失败,请检查网络连接或 Git 配置。"
    exit 1
fi

# ---------------- 3. 清理旧的构建文件 ----------------
echo "🧹 清理旧的构建文件..."
rm -rf ${BUILD_DIR}
mkdir -p ${BUILD_DIR}

# ---------------- 4. 编译 Go 项目 ----------------
echo "⚙️ 编译 Golang 项目..."
GOOS=linux GOARCH=amd64 go build -o ${BUILD_DIR}/${APP_NAME} main.go
if [ $? -ne 0 ]; then
    echo "❌ 编译失败!请检查代码错误。"
    exit 1
fi

# ---------------- 5. 打包文件 ----------------
echo "📦 打包应用..."
tar -czf ${BUILD_DIR}/${APP_NAME}.tar.gz -C ${BUILD_DIR} ${APP_NAME} config.yaml static/

# ---------------- 6. 逐个服务器并行部署 ----------------
deploy_server() {
    local server_info=$1
    local REMOTE_HOST=$(echo $server_info | cut -d':' -f1)
    local REMOTE_DIR=$(echo $server_info | cut -d':' -f2)

    echo "🚀 部署到服务器: $REMOTE_HOST"

    # 传输文件
    scp ${BUILD_DIR}/${APP_NAME}.tar.gz ${REMOTE_HOST}:${REMOTE_DIR}/

    # 远程服务器部署
    ssh ${REMOTE_HOST} << EOF
        cd ${REMOTE_DIR}
        
        # 备份旧版本(可选)
        if [ -f "${APP_NAME}" ]; then
            mv ${APP_NAME} ${APP_NAME}_backup_$(date +"%Y%m%d%H%M%S")
        fi

        # 解压新版本
        tar -xzf ${APP_NAME}.tar.gz

        # 查找并终止旧进程
        PID=\$(pgrep -f ${APP_NAME})
        if [ ! -z "\$PID" ]; then
            echo "🔴 终止旧进程: \$PID"
            kill -9 \$PID
        fi

        # 运行新的 Go 应用(后台运行)
        nohup ./${APP_NAME} > ${APP_NAME}.log 2>&1 &
        echo "✅ ${REMOTE_HOST} 上的应用已启动!"
EOF
}

# 并行部署到多台服务器
for server in "${SERVERS[@]}"; do
    deploy_server "$server" &
done

# 等待所有后台任务完成
wait
echo "🎉 所有服务器部署完成!"
复制代码

 

posted @   指令跳动  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示