当前位置: 首页 > news >正文

Shell脚本基础:用Bash自动化任务

Shell脚本基础:用Bash自动化任务

在Linux运维中,手动执行重复性任务既耗时又容易出错,而Shell脚本则为自动化提供了强大支持。
从基础概念到实用案例,逐步掌握用Bash实现自动化的核心技能。Shell脚本是Linux自动化的基石,掌握它将显著提升您的效率。


Shell脚本简介:什么是Shell脚本,Bash为何常用?

Shell脚本是将一系列Linux命令组合成一个可执行文件的编程方式。通过脚本,您可以一次性完成复杂任务,而无需逐行输入命令。Shell脚本通常由Shell解释器(如Bash)执行,文件以 .sh 结尾。

Bash(Bourne Again SHell) 是Linux中最常用的Shell,原因包括:

  • 普及性:几乎所有Linux发行版默认使用Bash。
  • 功能强大:支持变量、流程控制、管道等特性,适合脚本编写。
  • 兼容性:继承并扩展了早期的Bourne Shell(sh),与现有脚本无缝衔接。
  • 易用性:提供命令补全、历史记录等功能,降低学习曲线。

除了Bash,还有Sh、Ksh、Zsh等Shell,但Bash因其广泛应用和丰富文档成为自动化运维的首选。

Shell的类型

Linux系统中存在多种Shell实现,每种都有其特点和适用场景。以下是常见的几种Shell:

  • Bash(Bourne Again SHell)
    • Linux系统中默认的Shell,也是目前最流行的选择。
    • 兼容早期的Bourne Shell(sh),并在此基础上增加了命令补全、历史记录、命令行编辑等实用功能。
    • 适合日常使用和脚本编写。
  • Sh(Bourne Shell)
    • 最古老的Shell之一,功能较为基础。
    • 现多用于兼容性脚本,但在现代系统中通常链接到Bash。
  • Csh(C Shell)
    • 语法类似于C语言,适合熟悉C的开发者。
    • 功能较简单,使用范围有限。
  • Tcsh
    • Csh的增强版,增加了更多交互功能。
  • Ksh(Korn Shell)
    • 结合了Bourne Shell和C Shell的优点,支持高级编程特性。
    • 在某些Unix系统中较为常见。
  • Zsh
    • 近年来流行的Shell,功能丰富,支持插件和主题(如Oh My Zsh)。
    • 适合追求个性化体验的用户。

深入提示:您可以通过命令 echo $SHELL 查看当前使用的Shell,或者用 cat /etc/shells 列出系统中可用的Shell类型。如果想尝试其他Shell,可以直接输入其名称(如 zsh)切换。


编写第一个脚本:脚本结构、变量定义和用户输入

让我们从一个简单脚本开始,逐步了解其结构和基本元素。

脚本结构

一个典型的Shell脚本以 #!/bin/bash 开头,指定解释器。以下是一个简单示例:

#!/bin/bash
echo "Hello, World!"

步骤

  1. 创建文件:touch first_script.sh
  2. 编辑文件:将上述内容写入。
  3. 添加权限:chmod +x first_script.sh
  4. 执行:./first_script.sh

输出:Hello, World!
在这里插入图片描述

变量定义

变量是脚本的重要组成部分,用于存储和操作数据。定义变量无需声明类型,直接赋值即可:

#!/bin/bash 
NAME="Linux" 
echo "Welcome to $NAME!"

运行后输出:Welcome to Linux!
在这里插入图片描述

用户输入

通过 read 命令获取用户输入,增强脚本交互性:

#!/bin/bash 
echo "请输入你的名字:" 
read USERNAME 
echo "你好,$USERNAME!"

运行后,用户输入名字(如“Alice”),脚本输出:你好,Alice!
在这里插入图片描述


控制结构:条件语句、循环和case语句

Shell脚本支持流程控制,使其能够根据条件执行不同操作或重复任务。

条件语句(if-else)

用于判断条件并执行相应代码:

#!/bin/bash
echo "请输入一个数字:"
read NUM 
if [ $NUM -gt 0 ]; then    echo "这是一个正数" 
else    echo "这是一个非正数" 
fi
  • [ $NUM -gt 0 ]:检查变量是否大于0。
  • -gt(大于)、-lt(小于)、-eq(等于)等是常见比较运算符。
    在这里插入图片描述

循环(for和while)

  • for循环:遍历列表或文件:

    #!/bin/bash
    for i in 1 2 3; do    echo "数字:$i" 
    done
    

    输出:

    数字:1 数字:2 数字:3
    在这里插入图片描述

  • while循环:基于条件重复执行:

    #!/bin/bash 
    COUNT=0 
    while [ $COUNT -lt 3 ]; do    echo "计数:$COUNT"    COUNT=$((COUNT + 1)) 
    done
    

    输出:

    计数:0 计数:1 计数:2
    在这里插入图片描述

case语句

处理多条件选择,类似switch:

#!/bin/bash
echo "请输入一个颜色(red/green/blue):" 
read COLOR 
case $COLOR in    red) echo "你选择了红色";;    green) echo "你选择了绿色";;    blue) echo "你选择了蓝色";;    *) echo "未知颜色";; 
esac

输入“green”,输出:你选择了绿色。
在这里插入图片描述


实用示例:日志轮转、系统健康检查和简单备份

以下是三个实用的脚本示例,帮助您将所学应用到实际场景。

1. 日志轮转

目标:将日志文件压缩并归档,保持目录整洁。

#!/bin/bash
LOG_DIR="/var/log/app"
ARCHIVE_DIR="/var/log/archive"
DATE=$(date +%Y%m%d) # 创建归档目录(如果不存在) 
mkdir -p $ARCHIVE_DIR # 压缩并移动日志 
for LOG in $LOG_DIR/*.log; dogzip $LOG    mv $LOG.gz $ARCHIVE_DIR/$(basename $LOG).$DATE.gz
done 
echo "日志轮转完成!"

2. 系统健康检查

目标:检查磁盘使用率并报警。

#!/bin/bash 
THRESHOLD=80
USAGE=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1)
if [ $USAGE -gt $THRESHOLD ]; thenecho "警告:磁盘使用率 $USAGE% 超过阈值 $THRESHOLD%!"
else    echo "磁盘使用率正常:$USAGE%" 
fi

3. 简单备份

目标:备份指定目录到目标路径。

#!/bin/bash
SOURCE="/home/user/docs"
DEST="/backup"
DATE=$(date +%Y%m%d)tar -czf $DEST/backup_$DATE.tar.gz $SOURCE
echo "备份完成:$DEST/backup_$DATE.tar.gz"

提示:结合cron调度(如 0 2 * * * /path/to/backup.sh),可实现每日凌晨2点自动备份。


意义:Shell脚本为何重要?

Shell脚本是Linux自动化的核心工具,其价值体现在:

  • 效率提升:将繁琐的手动操作转化为一键执行。
  • 灵活性:适用于文件管理、系统监控、部署等多种场景。
  • 可扩展性:从小任务到大规模系统管理,Shell都能胜任。

如何深入学习Shell?

  • 实践:多写脚本,尝试解决实际问题。
  • 参考文档:输入 man bash 查看Bash手册。
  • 在线资源:如 ShellScript.sh。
  • 书籍推荐:《Linux Command Line and Shell Scripting Bible》。

相关文章:

Shell脚本基础:用Bash自动化任务

Shell脚本基础:用Bash自动化任务 在Linux运维中,手动执行重复性任务既耗时又容易出错,而Shell脚本则为自动化提供了强大支持。 从基础概念到实用案例,逐步掌握用Bash实现自动化的核心技能。Shell脚本是Linux自动化的基石&#xf…...

基于W2605C语音识别合成芯片的智能语音交互闹钟方案-AI对话享受智能生活

随着科技的飞速发展,智能家居产品正逐步渗透到我们的日常生活中,其中智能闹钟作为时间管理的得力助手,也在不断进化。基于W2605C语音识别与语音合成芯片的智能语音交互闹钟,凭借其强大的联网能力、自动校时功能、实时天气获取、以…...

【Java项目】基于Spring Boot的网上商城购物系统

【Java项目】基于Spring Boot的网上商城购物系统 技术简介:采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介:系统实现管理员:首页、个人中心、用户管理、商品分类管理、商品信息管理、订单评价管理、系统管理、订单管理&#x…...

开放标准(RFC 7519):JSON Web Token (JWT)

开放标准:JSON Web Token 前言基本使用整合Shiro登录自定义JWT认证过滤器配置Config自定义凭证匹配规则接口验证权限控制禁用session缓存的使用登录退出单用户登录Token刷新双Token方案单Token方案 前言 JSON Web Token (JWT) 是一种开放标准…...

JBoltAI_SpringBoot如何基于Deepseek官网API区分 R1大模型深度思考和具体回答的内容?

R1大模型推出后,Deepseek官网的API也更新了,我们可以看到 chat 接口的响应数据结果里多了一个reasoning_content 字段 于是我们的JBoltAI SDK 以及 SpringBoot版以及Jfinal版JBoltAI Platform 迅速跟进,提供了对深度思考的支持:…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-model.py

model.py ultralytics\models\yolo\model.py 目录 model.py 1.所需的库和模块 2.class YOLO(Model): 3.class YOLOWorld(Model): 1.所需的库和模块 # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/licensefrom pathlib import Pathfrom ult…...

MySQL 事务笔记

MySQL 事务笔记 目录 事务简介事务操作事务四大特性并发事务问题事务隔离级别总结 事务简介 事务(Transaction)是数据库操作的逻辑单元,由一组不可分割的SQL操作组成。主要用于保证: 多个操作的原子性(要么全部成功…...

react使用拖拽,缩放组件,采用react-rnd解决

项目中需求,要求给商品图片添加促销标签,并且可拉伸大小,和拖拽位置 最后选择用react-rnd来实现 话不多说,直接上代码!!! 1.在项目根目录下执行以下代码,引入react-rnd yarn add r…...

【C++基础】什么是C++?

本文收录于 《C编程入门》专栏,从零基础开始,介绍C编程入门相关的内容,欢迎关注,谢谢! 文章目录 一、前言二、发展简史三、主要特性四、应用场景五、第一个C程序六、总结 一、前言 为了让初学者快速的了解C语言&#…...

3 算法1-3 火星人

题目描述 一个火星人用一个人类的手演示了如何用手指计数。如果把五根手指――拇指、食指、中指、无名指和小指分别编号为 1,2,3,4 和 5,当它们按正常顺序排列时,形成了 5 位数 12345,当你交换无名指和小指的位置时,会形成 5 位数…...

【原创工具】同文件夹PDF文件合并 By怜渠客

【原创工具】同文件夹PDF文件合并 By怜渠客 原贴:可批量合并多个文件夹内的pdf工具 - 吾爱破解 - 52pojie.cn 他这个存在一些问题,并非是软件内自主实现的PDF合并,而是调用的pdftk这一工具,但楼主并没有提供pdftk,而…...

数据结构-直接插入和希尔排序

这次,我们来讲数据结构的排序的直接插入。 一:排序的思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 相当于,我们打牌如上图…...

vue3表单验证的时候访问接口如果有值就通过否则不通过.主动去触发校验

页面有个身份证号码的校验。校验完身份证格式是否符合之后还要去访问接口查询这个用户是否存在。如果存在才通过验证。否则就校验不通过 <el-form ref"ruleFormRef" :model"form" label-width"140px" label-position"right" label…...

Trae根据原型设计稿生成微信小程序密码输入框的踩坑记录

一、需求描述 最近经常使用Trae生成一些小组件和功能代码&#xff08;对Trae赶兴趣的可以看之前的文章《TraeAi上手体验》&#xff09;&#xff0c;刚好在用uniapp开发微信小程序时需要开发一个输入密码的弹框组件&#xff0c;于是想用Trae来实现。原型设计稿如下&#xff1a;…...

【数据结构】 最大最小堆实现优先队列 python

堆的定义 堆&#xff08;Heap&#xff09;是一种特殊的完全二叉树结构&#xff0c;通常分为最大堆和最小堆两种类型。 在最大堆中&#xff0c;父节点的值总是大于或等于其子节点的值&#xff1b; 而在最小堆中&#xff0c;父节点的值总是小于或等于其子节点的值。 堆常用于实…...

基于多层感知机(MLP)实现MNIST手写体识别

实现步骤 下载数据集处理好数据集确定好模型&#xff08;初始化模型参数等等&#xff09;确定优化函数&#xff08;损失函数也称为目标函数&#xff09;和优化方法&#xff08;一般选用随机梯度下降 SDG &#xff09;进行模型的训练进行模型的评估 import torch import torch…...

QT和有道词典有冲突,导致内存溢出,闪退。

提示&#xff1a;本文为学习记录&#xff0c;若有疑问&#xff0c;请联系作者。 前言 具体详细查看此博主&#xff1a;原文链接 在使用Qt Designer时&#xff0c;如果开启了有道词典&#xff0c;会导致Qt Designer崩溃。估计应该是把有道词典屏幕取词功能打开后&#xff0c;有…...

4. 示例:创建带约束的随机地址生成器(范围0x1000-0xFFFF)

文章目录 前言代码示例&#xff1a;运行方法&#xff1a;查看结果&#xff1a;关键功能说明&#xff1a;扩展功能建议&#xff1a; 前言 以下是一个完整的SystemVerilog测试平台示例&#xff0c;包含约束随机地址生成、日志输出和波形生成功能&#xff1a; 代码示例&#xff1…...

VSCode轻松调试运行C#控制台程序

1.背景 我一直都是用VS来开发C#项目的&#xff0c;用的比较顺手&#xff0c;也习惯了。看其他技术文章有介绍VS Code更轻量&#xff0c;更方便。所以我专门花时间来使用VS Code&#xff0c;看看它是如何调试代码、如何运行C#控制台。这篇文章是一个记录的过程。 2.操作 2.1 V…...

内容中台是什么?内容管理平台解析

内容中台的核心价值 现代企业数字化转型进程中&#xff0c;内容中台作为中枢系统&#xff0c;通过构建统一化的内容管理平台实现数据资产的高效整合与智能调度。其核心价值体现在打破传统信息孤岛&#xff0c;将分散于CRM、ERP等系统的文档、知识库、产品资料进行标准化归集&a…...

render_async嵌套渲染:构建复杂异步界面的完整解决方案

render_async嵌套渲染&#xff1a;构建复杂异步界面的完整解决方案 【免费下载链接】render_async render_async lets you include pages asynchronously with AJAX 项目地址: https://gitcode.com/gh_mirrors/re/render_async 在现代Web开发中&#xff0c;页面加载速度…...

LDBlockShow实战指南:基因组连锁不平衡分析与可视化解决方案

LDBlockShow实战指南&#xff1a;基因组连锁不平衡分析与可视化解决方案 【免费下载链接】LDBlockShow LDBlockShow: a fast and convenient tool for visualizing linkage disequilibrium and haplotype blocks based on VCF files 项目地址: https://gitcode.com/gh_mirror…...

Hitboxer:终极SOCD按键重映射解决方案,彻底解决游戏按键冲突问题

Hitboxer&#xff1a;终极SOCD按键重映射解决方案&#xff0c;彻底解决游戏按键冲突问题 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在激烈的游戏对战中&#xff0c;你是否曾因同时按下左右方向键而导致角色…...

别只盯着主控芯片!拆解STM32最小系统板:电源、时钟、复位三大支柱电路深度解析

STM32最小系统板设计进阶&#xff1a;电源、时钟与复位电路的工程实践 在嵌入式系统开发中&#xff0c;我们常常将注意力集中在主控芯片的功能实现上&#xff0c;却忽略了支撑系统稳定运行的三大基础电路——电源、时钟和复位。这些看似简单的电路模块&#xff0c;实则是整个系…...

Midjourney V6锐化失控?3步诊断+5组--sref/--stylize协同参数公式,立竿见影修复模糊与锯齿

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney V6锐化失控的本质归因 Midjourney V6 引入的全新扩散架构与隐式细节增强机制&#xff0c;导致图像生成过程中高频纹理被过度强化&#xff0c;其根本原因并非参数误配&#xff0c;而是模型在…...

Lovable后端集成方案深度拆解(含Spring Boot 3.2+GraalVM+OpenTelemetry完整Demo)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Lovable后端集成方案全景概览 Lovable 是一个面向现代 Web 应用的轻量级后端协作框架&#xff0c;其核心设计理念是“可组合、可观测、可演进”。它不绑定特定语言或运行时&#xff0c;而是通过标准化协议与契…...

从无人机到自动驾驶:一文读懂ROS中ENU、NED、相机坐标系到底怎么用

从无人机到自动驾驶&#xff1a;ROS中ENU、NED与相机坐标系实战指南 当你在无人机上安装Realsense相机时&#xff0c;是否遇到过相机数据与飞控数据"对不上"的情况&#xff1f;或者在自动驾驶项目中&#xff0c;GPS的北东地坐标如何与激光雷达的东北天坐标对齐&#…...

<数据集>yolo高粱叶片病害识别<目标检测>

数据集下载链接https://download.csdn.net/download/qq_53332949/92902223数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3242张 标注数量(xml文件个数)&#xff1a;3242 标注数量(txt文件个数)&#xff1a;3242 标注类别数&#xff1a;1 使用标注工具&#xff…...

3大核心价值:Python通达信数据接口MOOTDX的完整应用指南

3大核心价值&#xff1a;Python通达信数据接口MOOTDX的完整应用指南 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX作为一款优秀的Python通达信数据接口封装库&#xff0c;为开发者提供了免…...

终极指南:如何用Hindsight为聊天机器人添加长期记忆功能

终极指南&#xff1a;如何用Hindsight为聊天机器人添加长期记忆功能 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight是一个革命性的AI代理记忆系统&#xff0c;专门为聊…...