Shell 脚本基础笔记

article/2025/8/29 10:01:40

一 shell脚本概述

Shell 脚本是一种用 Shell 命令编写的脚本程序,用于在 Unix/Linux 系统的命令行环境中自动化执行任务。
它由一系列命令、逻辑控制语句(如条件判断、循环)和函数组成,保存为文本文件(通常以 .sh 为扩展名),由 Shell 解释器(如 Bash、Zsh)逐行解析执行。 

通过/etc/shells可查看系统支持的 Shell 类型,常见包括:

sh(Bourne Shell):Unix 系统中 root 默认 Shell,简洁轻量。

bash(Bourne Again Shell):Linux 默认 Shell,功能强大,兼容 sh。

csh:语法类似 C 语言,用于 BSD 系统。

ksh:兼容 sh 并吸收 csh 特性,适合复杂脚本。

Shell 脚本的核心特点

  1. 基于命令行:直接调用系统命令(如 lsgrepawk),无需编译。

  2. 轻量级:适合快速开发小型自动化任务。

  3. 跨平台性:在支持相同 Shell 的系统(如 Linux、macOS)中通用。

脚本格式

脚本文件通常以 #!/bin/bash 开头,这被称为 Shebang,作用是指定该脚本使用 bash 解析器来执行。例如:

#!/bin/bash
# 这是一个简单的 Shell 脚本
echo "Hello World!"  # 输出文本
mkdir backup         # 创建目录
cp *.txt backup/     # 复制所有 txt 文件到 backup 目录

二 Shell脚本中的基本元素

基本结构

1.脚本幻数(Shebang)

脚本第一行的 #!/bin/bash (常见 ),指定脚本使用的 Shell 解析器,告诉系统用什么程序来解释执行脚本内容。

#!/bin/bash

2.命令

可执行的语句,是实现脚本功能的核心。比如 echo 用于输出文本,ls 用于列出目录内容 ,cd 用于切换目录等。

3.注释

单行注释:以 # 开头,用于对某一行代码或脚本某部分功能进行说明,提高脚本可读性,如 # 这是一个输出问候语的脚本 。

多行注释:可利用 :<<'END' 和 END 实现,END 可自定义,如 :<<'COMMENT' 与 COMMENT 配对 。

 4.变量

系统变量:如 $HOME(用户主目录 )、$PWD(当前工作目录 )等,由系统定义和维护。

自定义变量:用户自己定义的变量,如 name=Alice ,注意等号两边不能有空格。

特殊变量$0(脚本名 )、$1 - $9(脚本参数 )、$#(参数个数 )、$?(上一命令退出状态 )等。

5.运算符

数值运算:如 +(加 )、-(减 )、*(乘 )、/(除 )、%(取余 ) ,可通过 ((运算式)) 或 expr 命令进行运算。

条件判断:如 -eq(等于 )、-ne(不等于 )、-gt(大于 )等 ,配合 [ 条件判断式 ] 进行条件判断。

6.流程控制语句

条件判断if - then - elif - else - fi 结构,根据条件执行不同代码块。

循环语句for 循环用于遍历列表或指定范围;while 循环在条件为真时重复执行代码块;until 循环在条件为假时重复执行代码块。

其他case - esac 用于多条件分支判断;break 用于跳出循环;continue 用于跳过本次循环的剩余部分,继续下一次循环。

7.函数

可将重复使用的代码块封装成函数,提高代码复用性,定义格式如 函数名() { 程序 } ,调用时直接写函数名。

8.脚本调试与退出值

调试方法

使用sh -x 脚本名显示脚本执行过程,+开头的行表示正在执行的命令,便于定位错误。

 退出值

定义:命令执行后的状态码(0~255),0 表示成功,非 0 为失败。

查看:执行命令后,用echo $?查看退出值。

修改:在脚本中用exit 数值指定退出值,如exit 66

示例:

#!/bin/bash  
# 作者:czg  
# 日期:2025/05/29  
# 功能:输出系统信息  echo "当前用户:$czg"  
echo "当前路径:$PWD"  
date  
exit 0  # 正常退出  

三 shell脚本的作用

Shell 脚本的主要作用是提升效率和实现自动化,尤其在系统管理、运维、数据处理等领域中不可或缺。

核心作用:


1.自动化重复操作

例:批量重命名文件、定期清理日志、自动备份数据。

替代手动逐条输入命令,减少人为错误。

2.简化复杂任务

例:一键部署服务、集成多步骤流程(如下载数据 → 处理 → 上传结果)。 

通过逻辑控制(如 if、for)组合多个命令。

3.系统管理与监控

例:检查磁盘空间、监控进程状态、发送报警邮件。

直接调用系统工具(如 df、ps、cron)。

4.快速原型开发

例:临时测试某个功能或流程。

无需编译,修改后立即运行。

四 脚本执行方法

  1. 当前环境执行(不创建子进程)

    • 命令:./脚本名(需赋予执行权限,chmod +x 脚本名)或source 脚本名/./脚本名(无需权限)。
    • 特点:在当前 Shell 进程中运行,影响当前环境变量。
  2. 指定环境执行(创建子进程)

    • 命令:sh 脚本名bash 脚本名,脚本无需执行权限。
    • 特点:在子进程中运行,不影响当前环境。
vim lee.sh
#!/bin/bash 
cat
.lee.sh #当前
source lee.sh #当前
sh lee.sh #指定

五 Shell 脚本的典型应用场景:

  1. 日常运维:自动化日志切割、清理过期文件、服务状态监控。

  2. 部署与发布:一键编译代码、打包应用、更新服务器。

  3. 数据处理:批量转换文件格式、提取文本内容、生成统计报表。

  4. 开发辅助:运行测试用例、生成文档、环境配置。


http://www.hkcw.cn/article/MgaaUUFwUc.shtml

相关文章

sudo apt-get update错误解决

1.尝试sudo apt-get update发现很多无法命中且报错 首先使用 sudo vi /etc/resolv.conf 进入该文件后 代码如下&#xff1a; nameserver 8.8.4.4 nameserver 8.8.8.8然后按两次esc键&#xff0c;然后输入&#xff1a;wq 先输入 &#xff08;&#xff1a;&#xff09;再输…

管程机制 基本讲解

管程定义 构成要素&#xff1a;管程定义了一个数据结构&#xff0c;以及能为并发进程在该数据结构上执行的一组操作。 数据结构&#xff1a;例如在多进程共享资源场景中&#xff0c;可代表共享资源状态的变量集合&#xff0c;像共享文件读写状态、共享缓冲区占用情况等。一组操…

c#基础09(类与对象)

文章目录 类与对象面向对象概念封装访问修饰符 类如何定义类字段与属性 类的对象构造方法this关键字 类与对象 面向对象概念 并不是一个技术&#xff0c;而是一种编程指导思想。把现实世界的具体事物全部看出一个一个的对象来解决实际问题。 面向对象编程共同三大特性&#…

ai工具集:AI材料星ppt生成,让你的演示更出彩

在当今快节奏的工作环境中&#xff0c;制作一份专业、美观的 PPT 是展示工作成果、传递信息的重要方式。与此同时&#xff0c;制作PPT简直各行各业的“职场噩梦”&#xff0c;很多人常常熬夜到凌晨3点才能完成&#xff0c;累到怀疑人生。 现在&#xff1f;完全不一样了&#x…

高速连接器设计的真相

在高速连接器设计领域&#xff0c;有两种相反的想法。对于某些人来说&#xff0c;如果你简单地将塑料和金属碎片放在一起&#xff0c;最终你会得到信号传输。这个过程非常简单。另一方面&#xff0c;有一种观点认为&#xff0c;可靠的连接器设计需要对电磁理论有深入的理解&…

计算机视觉---YOLOv4

YOLOv4&#xff08;You Only Look Once v4&#xff09;于2020年由Alexey Bochkovskiy等人提出&#xff0c;是YOLO系列的重要里程碑。它在YOLOv3的基础上整合了当时最先进的计算机视觉技术&#xff0c;实现了检测速度与精度的显著提升。以下从主干网络、颈部网络、头部检测、训练…

IP地址交换如何让车联网效率翻倍?

在车辆移动过程中实现稳定可靠的网络连接&#xff0c;是智能交通系统发展的关键技术之一。车辆行动通讯网络&#xff08;VANET&#xff09;通过车载设备和路边基础设施的配合&#xff0c;使车辆在行驶中能够接入互联网。要实现这一目标&#xff0c;每辆车都需要获得唯一的IP地址…

DexWild:野外机器人策略的灵巧人机交互

25年5月来自 CMU 的论文“DexWild: Dexterous Human Interactions for In-the-Wild Robot Policies”。 大规模、多样化的机器人数据集已成为将灵巧操作策略泛化到新环境的一条有效途径&#xff0c;但获取此类数据集面临诸多挑战。虽然遥操作可以提供高保真度的数据集&#xf…

大连格恩朗椭圆齿轮流量计:工业流量测量的精密刻度尺

在工业生产的庞大脉络中&#xff0c;流体流量的精准测量如同心脏监测仪之于人体&#xff0c;细微偏差可能导致整个系统的失衡。大连格恩朗椭圆齿轮流量计以**0.5%的精度**&#xff08;部分型号达0.2%&#xff09;成为工业流量领域的“精密刻度尺”&#xff0c;其核心原理如同一…

【NebulaGraph】查询案例(七)

【NebulaGraph】查询案例 七 1. 查询语句12. 查询语句23. 查询语句34. 查询语句4 1. 查询语句1 GO FROM "player100" OVER * YIELD type(edge) AS link, properties($$) AS properties,tostring(src(edge)) AS src,tostring(dst(edge)) AS dst, tags($$) AS tagLi…

database disk image is malformed 的解决方法

Sqlite数据库在执行时报错&#xff1a;database disk image is malformed 解决方法: 1.重启电脑试下&#xff0c;或者重启服务试下 2.重新创建新的表&#xff0c;读出正确的部分的数据结构及数据 (1)命令行中定位到数据表的路径下&#xff1b; &#xff08;2&#xff09;执行如…

机动车结构化检测算法AI智能分析网关V4打造全场景应用解决方案

一、方案概述​ 随着交通管理智能化发展&#xff0c;精准高效的机动车信息检测需求迫切。AI智能分析网关V4基于深度学习与计算机视觉技术&#xff0c;具备强大的机动车结构化检测能力&#xff0c;可快速提取车辆关键信息&#xff0c;赋能交通管理与安防监控。本方案将围绕其技…

认识多系统萎缩:一种隐匿进展的神经退行性问题

多系统萎缩是一种罕见的神经退行性疾病&#xff0c;起病隐匿且呈进行性发展&#xff0c;平均发病年龄约 50 岁&#xff0c;男性略多于女性。 该疾病主要影响中枢神经系统多个部位&#xff0c;包括锥体外系、小脑、自主神经系统等。根据主要症状差异&#xff0c;可分为不同亚型&…

UE5蓝图中播放背景音乐和使用代码播放声音

UE5蓝图中播放背景音乐 1.创建背景音乐Cube 2.勾选looping 循环播放背景音乐 3.在关卡蓝图中 Event BeginPlay-PlaySound2D Sound选择自己创建的Bgm_Cube 蓝图播放声音方法二&#xff1a; 使用代码播放声音方法一 .h文件中 头文件引用 #include "Kismet/GameplayS…

【C语言极简自学笔记】项目开发——扫雷游戏

一、项目概述 1.项目背景 扫雷是一款经典的益智游戏&#xff0c;由于它简单而富有挑战性的玩法深受人们喜爱。在 C 语言学习过程中&#xff0c;开发扫雷游戏是一个非常合适的实践项目&#xff0c;它能够综合运用 C 语言的多种基础知识&#xff0c;如数组、函数、循环、条件判…

职业本科院校无人机专业人才培养解决方案

2023年的中央经济工作会议强调了以科技创新推动现代化产业体系构建的重要性&#xff0c;并提出发展生物制造、商业航天、低空经济等战略性新兴产业。低空经济&#xff0c;依托民用无人机等低空飞行器&#xff0c;在多场景低空飞行活动的牵引下&#xff0c;正逐步形成一个辐射广…

Text-to-SQL评估体系:从Spider 1.0数据集到2.0框架的跨越与革新

文章目录 一、引言&#xff1a;评估体系迭代推动Text-to-SQL技术发展二、Spider 1.0&#xff1a;跨领域语义解析数据集的奠基2.1 数据集构建与核心特征2.2 评估逻辑与技术局限 三、Spider 2.0&#xff1a;企业级工作流评估框架的崛起3.1 框架定位与核心组件3.2 工作流任务的革命…

电感器在数据中心电源系统中的应用及选型

当前&#xff0c;AI应用的加速落地带来了功耗的大幅提升&#xff0c;直接推动了数据中心电源需求的增长。根据国际能源署2023年的数据&#xff0c;全球数据中心能耗占比已超全球电力消耗的3%&#xff0c;单台A100 GPU服务器峰值功耗已经突破10kW。数据中心功耗的大幅提升&#…

WordPress搜索引擎优化的最佳重定向插件:进阶指南

在管理网站时&#xff0c;我们经常需要调整网页地址或修复错误链接。这时&#xff0c;通过重定向不仅能有效解决这些问题&#xff0c;还能显著提升网站在搜索引擎中的排名。对于熟悉基础重定向插件的用户来说&#xff0c;一些功能更强大的工具可以帮助你更全面地管理网站&#…

Codejock ToolkitPro 与 BCGControlBar Pro 深度对比

Codejock ToolkitPro 与 BCGControlBar Pro 深度对比 在 MFC (即 Microsoft Foundation Classes)基础上开发框架应用时&#xff0c;控件 UI 的环境一直是个难题&#xff1a;原生控件设计落后&#xff0c;不支持现代化主题&#xff0c;缩放适配性差&#xff0c;形成了 MFC 开发…