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 "🎉 所有服务器部署完成!"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?