Linux操作系统-shell编程之shell脚本应用案例
本文提供四个实用的Shell脚本应用案例包括批量创建用户、Nginx源码安装、系统巡检以及主机连通性检测。1、自动批量创建用户创建100个用户输出用户名和密码的列表用户密码需要为随机字符串用户列表在userlist.txt文件中。需求实现shell脚本如下#!/bin/bash #this script is for adding user #version 1.0 #author: albertzhang #user.txt格式如下 #user1 #user2 #user3 #.... while read line;do username$line #添加用户 useradd $username #产生随机密码 passwdhead /dev/urandom | tr -dc A-Za-z0-9 | head -c 10 #设置用户密码 echo $passwd |passwd --stdin $username #将账户密码输出到userlist.txt文件中 if [ $? -eq 0 ];then echo $username $passwd userlist.txt echo add $username success. fi done user.txt脚本执行结果验证2、Nginx源码自动安装通过原码编译安装linux并实现nginx开机自启动。需求实现shell脚本如下#!/bin/bash #this script is for installing nginx by using source code of nginx #version 1.0 #author: albertzhang #安装基础软件包 yum groupinstall Development Tools yum install wget pcre pcre-devel zlib zlib-devel openssl openssl-devel -y #下载nginx源码包并解压 wget https://nginx.org/download/nginx-1.30.4.tar.gz tar -zxvf nginx-1.30.4.tar.gz cd nginx-1.30.4 #创建nginx运行用户 groupadd nginx useradd -g nginx -s /sbin/nologin -M nginx #nginx原码安装配置 ./configure \ --prefix/usr/local/nginx \ --usernginx \ --groupnginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_stub_status_module \ --with-stream \ --with-http_gzip_static_module #编译与安装nginx make make install #测试nginx是否安装成功 /usr/local/nginx/sbin/nginx echo nginx 启动成功 || (echo nginx 启动失败;exit 1) ipaddrifconfig |egrep [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}|grep -v 127.0.0.1 |awk -F {print $2} status_code$(curl -o /dev/null -s -w %{http_code}\n http://${ipaddr}) if [[ $status_code 200 ]];then echo nginx 安装成功 else echo nginx 安装失败 exit 1 fi #添加nginx服务文件实现开机自启动 cat /etc/systemd/system/nginx.service EOF [Unit] DescriptionThe NGINX HTTP and reverse proxy server Afternetwork.target [Service] Typeforking ExecStartPre/usr/local/nginx/sbin/nginx -t ExecStart/usr/local/nginx/sbin/nginx ExecReload/usr/local/nginx/sbin/nginx -s reload ExecStop/usr/local/nginx/sbin/nginx -s stop PrivateTmptrue [Install] WantedBymulti-user.target EOF /usr/local/nginx/sbin/nginx -s stop systemctl start nginx systemctl enable nginx if systemctl status nginx |grep running;then echo nginx 服务启动成功 echo nginx 访问地址http://${ipaddr} fi脚本执行结果验证3、系统自动巡检巡检操作系统获取CPU、内存、磁盘空间使用率、磁盘IO使用率等指标。需求实现shell脚本如下#!/bin/bash # # system inspection for centos7 # functionusage of cpu、usage of memory、usage of disk capacity、util of disk # authoralbertzhang # version1.0 # # 设置颜色输出可选 RED\033[0;31m GREEN\033[0;32m YELLOW\033[0;33m NC\033[0m # No Color # 获取主机名和当前时间 HOSTNAME$(hostname) DATETIME$(date %Y-%m-%d %H:%M:%S) # 输出标题 echo echo -e 系统巡检报告 - ${HOSTNAME} echo 时间: ${DATETIME} echo # ------------------------------------------------------------ # 1. CPU 使用率 # ------------------------------------------------------------ echo -e \n[1] CPU 使用率 # 使用 top 或 mpstat这里用 top 的 batch 模式获取 CPU_IDLE$(top -bn1 | grep Cpu(s) | awk {print $8} | cut -d. -f1) CPU_USAGE$((100 - CPU_IDLE)) echo CPU 使用率: ${CPU_USAGE}% (空闲 ${CPU_IDLE}%) # 系统负载1分钟、5分钟、15分钟 LOAD$(uptime | awk -Fload average: {print $2} | sed s/^[ \t]*//) echo 系统负载: ${LOAD} # ------------------------------------------------------------ # 2. 内存使用率 # ------------------------------------------------------------ echo -e \n[2] 内存使用率 MEM_TOTAL$(free -m | awk /^Mem:/{print $2}) MEM_USED$(free -m | awk /^Mem:/{print $3}) MEM_FREE$(free -m | awk /^Mem:/{print $4}) MEM_AVAIL$(free -m | awk /^Mem:/{print $7}) MEM_PERCENT$((MEM_USED * 100 / MEM_TOTAL)) echo 总内存: ${MEM_TOTAL} MB echo 已用内存: ${MEM_USED} MB echo 空闲内存: ${MEM_FREE} MB echo 可用内存: ${MEM_AVAIL} MB echo 内存使用率: ${MEM_PERCENT}% # ------------------------------------------------------------ # 3. 磁盘空间使用率主要分区 # ------------------------------------------------------------ echo -e \n[3] 磁盘空间使用率 (主要分区) # 显示所有挂载点排除 tmpfs、devtmpfs 等 df -hP | grep -vE ^(Filesystem|tmpfs|devtmpfs) | while read line; do usage$(echo $line | awk {print $5} | sed s/%//) mount$(echo $line | awk {print $6}) used$(echo $line | awk {print $3}) avail$(echo $line | awk {print $4}) size$(echo $line | awk {print $2}) # 如果使用率超过 80% 则高亮显示 if [ $usage -ge 80 ] 2/dev/null; then echo -e ${RED}${mount}${NC} 总容量 ${size} 已用 ${used} 可用 ${avail} 使用率 ${usage}% (警告) else echo ${mount} 总容量 ${size} 已用 ${used} 可用 ${avail} 使用率 ${usage}% fi done # ------------------------------------------------------------ # 4. 磁盘 I/O 使用率 (%util) # ------------------------------------------------------------ echo -e \n[4] 磁盘 I/O 使用率 (%util) # 检查 iostat 是否安装 if ! command -v iostat /dev/null; then echo -e ${YELLOW}警告: iostat 未安装请执行 yum install -y sysstat 安装。${NC} else # 仅显示非 0 使用率的设备或全部显示 iostat -x -k 1 2 | tail -n 4 | while read line; do # 跳过空行 [ -z $line ] continue # 提取设备名和 %util倒数第二列 device$(echo $line | awk {print $1}) util$(echo $line | awk {print $(NF-1)}) # 跳过 loop 或 ram 设备 if [[ $device ~ ^(loop|ram|sr) ]]; then continue fi # 如果 util 是数字且大于 0或者我们想显示所有 if [[ $util ~ ^[0-9.]$ ]] [ $(echo $util 0 | bc) -eq 1 ] 2/dev/null; then echo ${device}: %util ${util}% fi done fi echo -e \n echo 巡检完成 echo 脚本执行结果验证4、主机连通性自动检测编写shell 脚本检测主机列表内的主机存活与否。需求实现shell脚本如下#!/bin/bash #check host is up or down #version 1.0 #author: albertzhang #第一种方法 #for host in cat iplist.txt;do # ping -c 2 -w 1 $host /dev/null 21 echo $host is up. || echo $host is down. #done #第二种方法 cat iplist.txt | while read host;do ping -c 2 -w 1 $host /dev/null 21 echo $host is up. || echo $host is down. done脚本执行结果验证Shell脚本相关文章到此就结束了熟悉shell的方法就是多写多练如果你有任何疑问欢迎在评论区留言交流

相关新闻

mysql-锁的种类

mysql-锁的种类

重点:维度 Java synchronized MySQL InnoDB行锁 锁载体 Java 对象Object 索引记录(数据行资源) 载体谁指定 开发者手动传入obj SQL的where条件自动定位 竞争者 线程 …

2026/7/27 6:03:16阅读更多 →
Linux内核动态追踪:kprobe与kretprobe原理与实践

Linux内核动态追踪:kprobe与kretprobe原理与实践

1. 内核探针技术概述在Linux内核开发与性能分析领域,kprobe和kretprobe是两种强大的动态追踪工具。它们允许开发者在不重新编译内核或重启系统的情况下,动态地插入探测点来收集内核函数的执行信息。这种技术最初由IBM开发,现已成为Linux内核调…

2026/7/27 6:03:16阅读更多 →
SAP ABAP CDS开发中的语义命名规范与实践

SAP ABAP CDS开发中的语义命名规范与实践

1. 项目概述:语义命名在SAP ABAP CDS开发中的核心价值在SAP ABAP开发领域,CDS(Core Data Services)视图已成为现代数据建模的标准工具。但许多开发团队在实际项目中常遇到一个看似简单却影响深远的问题:字段命名混乱导…

2026/7/27 6:03:16阅读更多 →
C++异常处理核心机制与RAII实践:从基础原理到复杂场景应用

C++异常处理核心机制与RAII实践:从基础原理到复杂场景应用

1. 项目概述:为什么C异常处理是资深工程师的“必修课”?干了这么多年C,从桌面应用到服务器后台,再到嵌入式系统,我越来越觉得,异常处理这块内容,是区分“会写代码”和“能写好代码”的一道分水岭…

2026/7/27 7:27:22阅读更多 →
Godot游戏开发自动化工作流:Aseprite资源导入与Dodo工具实践

Godot游戏开发自动化工作流:Aseprite资源导入与Dodo工具实践

1. 项目概述:当Godot遇上Dodo,一个高效的游戏开发工作流如果你正在用Godot引擎做游戏,尤其是涉及到2D像素风或者需要频繁处理美术资源,那你可能对“资源导入-调整-测试”这个循环感到头疼。美术同学导出的精灵图(Sprit…

2026/7/27 7:27:22阅读更多 →
基于YOLOv8与改进HRNet的篮球动作实时分析系统

基于YOLOv8与改进HRNet的篮球动作实时分析系统

1. 系统概述与核心价值篮球运动分析正在经历从传统人工观察向智能化技术转型的关键时期。作为一名长期从事体育科技研发的工程师,我在实际项目中发现传统视频分析存在三个致命缺陷:主观判断误差大、关键帧捕捉不精准、量化指标缺失。这套基于YOLOv8与改进…

2026/7/27 7:27:22阅读更多 →
Unity 2D射击系统全解析:从输入检测到对象池优化

Unity 2D射击系统全解析:从输入检测到对象池优化

1. 项目概述与核心思路最近在做一个2D横版射击游戏,核心玩法就是控制角色移动和发射子弹。这个功能听起来简单,但真要自己动手从零实现,里面门道还挺多的。不是简单实例化一个预制体就完事了,你得考虑子弹从哪里生成、朝哪个方向飞…

2026/7/27 7:27:22阅读更多 →
AI原生办公助手:重构工作流,提升团队协作效率

AI原生办公助手:重构工作流,提升团队协作效率

你有没有过这样的经历:周一早上打开电脑,面对满屏的邮件、待办事项和会议邀请,感觉整个人都被工作淹没了?上周我就经历了这样的一天——三个项目同时推进,客户需求反复修改,团队协作信息混乱,整…

2026/7/27 7:27:22阅读更多 →
公众号文章一直发,搜索排名却没变化

公众号文章一直发,搜索排名却没变化

你是这种情况吗?每天发文、每周更新,公众号后台显示“已发内容”越来越多,但搜索排名却一动不动,连自己搜都翻不到。pearbing很多人以为多发几篇就能把排名“压上去”。但认真告诉你,微信搜一搜的逻辑根本不是你想象的…

2026/7/27 7:25:22阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →