18 Shell编程规范与变量
目录
18.1 Shell脚本概述
18.1.1 Shell的作用
18.1.2 编写第一个Shell脚本
18.1.3 重定向与管道操作
18.2 Shell变量的作用、类型
18.2.1 自定义变量
18.2.2 特殊的Shell变量
18.1 Shell脚本概述
可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。
1.shell脚本应用场景
1.重复性操作
2.交互性任务
3.批量事务处理
4.服务运行状态监控
5.定时任务执行
18.1.1 Shell的作用
Linux系统中的Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。


18.1.2 编写第一个Shell脚本
将平时使用的各种Linux命令按顺序保存到一个文本文件中,然后添加可执行权限,这个文件就成为一个Shell脚本。

执行脚本文件
1.方法一:脚本文件路径(绝对路径与相对路径,必须有x权限)

2. 方法二:sh脚本文件路径
![]()
3.方法三:source脚本文件路径

18.1.3 重定向与管道操作
由于Shell脚本“批量处理”的特殊性,其大部分操作过程以静默方式运行,不需要用户进行干预。因此提取、过滤执行信息变得十分重要。
1.重定向操作
1.标准输入:从该设备接收用户输入的数据
2.标准输出:通过该设备想用户输出数据
3.标准错误:通过该设备报告执行出错信息
| 类型 | 设备文件 | 文件描述编号 | 默认设备 |
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdout | 1 | 显示器 |
| 标准错误输出 | /dev/stderr | 2 | 显示器 |
| 类型 | 操作符 | 用途 |
| 重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
| 重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
| >> | 将输出结果追加指定的文件尾部 | |
| 标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
| 2>> | 将错误信息追加到指定的文件中 | |
| 混合输出 | &> | 将标准输出、标准错误的内容保存到同意文件中 |
(1)重定向输出

(2)重定向输入

(3)错误重定向

2.管道操作
管道操作为不同命令之间的协同工作提供了一种机制,位于管道符号“|”左侧的命令输出的结果,将作为右侧命令的输入(处理对象),同一行命令可以使多个管道。

又如,若要提取根分区(1)的磁盘使用率信息,可以执行以下操作,其中用到了df、grep、awk 命令和管道操作。

重定向与管道操作是 Shel 环境中十分常用的功能,若能够熟练掌握并灵活运用,将有助于编写代码简洁但功能强大的 Shell 脚本程序。
18.2 Shell变量的作用、类型
用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。
常见Shell变量的类型包括自定义变量、环境变量、只读变量、位置变量、预定义变量。
18.2.1 自定义变量
1.命令格式:变量名=变量值
2.查看变量:echo $变量名
3.赋值时使用引号
(1)双引号:允许通过$符号引用其它变量值。
(2)单引号:禁止引用其它变量值,$视为普通字符。
(3)反撇号:命令替换,提取命令执行后的输出结果。
4.从键盘输入内容为变量赋值
(1)命令格式:read -p “提示信息”变量名
5.变量的作用范围
(1)命令格式
export 变量名
export 变量名=变量值——新变量

18.2.2 特殊的Shell变量
1.变量的运算
(1)命令格式:expr 变量1 运算符 变量2
(2)常用运算符
a.加法运算:+
b.减法运算:-
c.乘法运算:\*
d.除法运算:/
e. 求模(取余)运算:%
2.特殊变量
(1)环境变量
a.配置文件:/etc/profile、~/.bash_profile
b.常见的环境变量:PWD、PATH、USER、SHELL、HOME
(2)只读变量(用于变量值不允许被修改的情况)

(3)位置变量
a.表示为$n,n为1~9之间的数字
(4)预定义变量
a.$#:命令行中位置变量的个数。
b.$*:所有位置变量的内容。
c.$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示异常或出错。
d.$0:当前执行的进程/程序名。
相关文章:
18 Shell编程规范与变量
目录 18.1 Shell脚本概述 18.1.1 Shell的作用 18.1.2 编写第一个Shell脚本 18.1.3 重定向与管道操作 18.2 Shell变量的作用、类型 18.2.1 自定义变量 18.2.2 特殊的Shell变量 18.1 Shell脚本概述 可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。…...
Linux基础命令大全(详解版)
Linux基础命令(详解版) 文章目录 Linux基础命令(详解版)1.Linux的目录结构**2.Linux路径的描述方式**3.Linux命令基础格式4.ls命令 隐藏文件、文件夹5.pwd命令6.cd命令 特殊路径符7.mkdir命令 文件操作命令8.touch命令9.cat命令10…...
python列表常见去重方法
列表去重在python实际运用中,十分常见,也是最基础的重点知识。 1. 使用for循环实现列表去重 此方法去重后,原顺序保持不变。 # for循环实现列表去重 list1 [a, 4, 6, 4, b, hello, hello, world, 9, 9, 4, a] list2 [] for l1 in list1:…...
usb摄像头应用编程
作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…...
康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(一)
功能模型接口FMI(Functional Mock-up Interface)是一个开放且与工具解耦的标准。FMI包含了一个C-API(接口),一个用于描述接口的XML文件以及可交换的功能模型单元FMU(Functional Mock-up Unit)&a…...
OPenCV中绘制多条多边形曲线函数polylines的使用
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 功能描述 绘制多条多边形曲线 原型1 void cv::polylines ( InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar & color…...
气膜球幕影院:娱乐体验的新高度—轻空间
气膜球幕影院以其独特的全景沉浸体验和丰富的娱乐内容,成为了现代娱乐产业的重要组成部分。轻空间带您来探索一下气膜球幕影院带来的独特娱乐体验。 全景沉浸式体验 气膜球幕影院的360度全景沉浸式体验,彻底改变了传统观影方式。观众被包围在一个球形屏幕…...
阿里CEO个人投资的智驾公司,走了不一样的路
佑驾创新在去年8月和11月完成两轮融资,在今年5月底递表港交所,目前拿到了29家车企88款车型的量产订单。自动驾驶赛道不缺明星,这些因素本不足以凸显它的差异化。但是在招股书中,一条特殊的发展路线,却让佑驾创新显得不…...
Arduino平台软硬件原理及使用——无源蜂鸣器模块的使用
文章目录 一、蜂鸣器发声原理 二、无源蜂鸣器与有源蜂鸣器的区分 三、无源蜂鸣器模块在Arduino中的使用 一、蜂鸣器发声原理 上图为常见的不同封装及规格的蜂鸣器。 同蜜蜂、知了等昆虫发声原理一样,蜂鸣器同样靠振动来发出声音; 如上图为无源蜂鸣器的内…...
【Go】用 DBeaver、db browser 和 SqlCipher 读取 SqlCipher 数据库
本文档主要描述如何用 DBeaver、db browser 和 SqlCipher 上打开加密的 SQLite3 数据库(用 SqlCipher v3 加密) 软件版本 DBeaver:v24.1.0 SQLite-driver: sqlite-jdbc-3.46.0.0.jar dbbrowser-for-sqlite-cipher:3.12.2 SqlCipher cli(ubuntun)&am…...
ROS操作过程中的报错
文章目录 错误:E: Unable to locate package ros-noetic-desktop-full报错问题报错原因解决方法 错误2:ERROR: cannot download default source list from:报错问题错误原因解决办法 错误:E: Unable to locate package ros-noetic-desktop-fu…...
Qt项目学习-20240617
Qt项目学习 1.0 文件构建 1.1 预处理命令 C预处理命令是编译过程中的第一步,发生在编译器进行实际编译之前。预处理器(preprocessor)执行这些命令,它们不是C语言的一部分,但对源代码的编译过程至关重要。以下是一些常…...
加密好的WPSword文档,忘记密码怎么办?
在日常办公和学习中,我们经常使用WPS Word等文档处理软件来创建和编辑重要文件。为了保护这些文件不被未经授权的人访问,我们通常会选择给文档设置密码。然而,有时我们可能会因为时间久远或其他原因而忘记自己设置的密码,这时该如…...
C# WPF 读写CAN数据
C# WPF 读写CAN数据 CAN 分析仪 分析仪资料下载 官方地址:https://www.zhcxgd.com/1.html CSDN: 项目配置 复制Dll库文件 文件在上面的资料里面 设置不安全代码 CAN C#工具类 CAN_Tool.cs using Microsoft.VisualBasic; using System; using Sys…...
力扣2517.礼盒的最大甜蜜度
力扣2517.礼盒的最大甜蜜度 二分答案求最小值 排完序判断是否有k个差距至少为mid的元素别用i遍历 可能会越界 用 : 有多少取多少 class Solution {public:int maximumTastiness(vector<int>& price, int k) {ranges::sort(price);auto check [&](int mid) -&…...
多模块存储器
随着计算机技术的发展,处理的信息量越来越多,对存储器的速度和容量要求也越来越高;而且随着CPU性能的不断提高、IO设备数量不断增加,导致主存的存取速度已经称为了整个计算机系统的性能瓶颈。这就要求我们必须提高主存的访问速度。…...
Windows反截屏开发实现
文章目录 Windows反截屏开发实现1. SetWindowDisplayAffinity2. 反截屏系统3. 总结 Windows反截屏开发实现 最近在我们云桌面中需要做到反截屏能力,所谓反截屏就是我们无法通过截图软件(微信,QQ,截图等程序)截取桌面的…...
Android.mk的用法
前言 Android.mk 文件是 Android 编译系统中用于描述项目源文件、库和模块的 Makefile。它采用 GNU Make 的语法,但也包含了一些特定于 Android 编译系统的规则和变量。以下是对其语法和使用方法的详细解释及示例。 一:模块种类 一个Android.mk file用来向编译系统描述你的源…...
android studio CreateProcess error=2, 系统找不到指定的文件
【问题记录篇】 在AndroidStudio编译开发jni相关工程代码的时候,编译遇到的这个报错: CreateProcess error2, 系统找不到指定的文件。排查处理步骤: 先查看Build Output的具体日志输出 2.了解到问题出在了NDK配置上,此时需要根据自己的gra…...
jQuery如何把单选框设置为选中状态
在网页开发中,我们经常需要使用表单元素来收集用户数据。其中,单选框(radio button)是一种常见的表单元素,用于从一组选项中选择一个。使用jQuery,我们可以轻松地控制这些单选框的状态,包括将它…...
AnyFlip下载器:3分钟将在线翻页电子书变为永久PDF收藏
AnyFlip下载器:3分钟将在线翻页电子书变为永久PDF收藏 【免费下载链接】anyflip-downloader Download anyflip books as PDF 项目地址: https://gitcode.com/gh_mirrors/an/anyflip-downloader 你是否曾在AnyFlip网站上发现一本精彩的电子书,想要…...
ARM GICv3虚拟中断处理:GICV_IAR寄存器详解
1. GICV_IAR寄存器概述GICV_IAR(Virtual Machine Interrupt Acknowledge Register)是ARM GICv3架构中虚拟CPU接口的关键寄存器,主要用于虚拟机环境下的中断确认机制。当虚拟中断信号到达处理器时,通过读取该寄存器可以获取当前最高…...
AI代码工程化实战:从生成到部署的确定性框架
1. 项目概述:从“AI画饼”到“AI交付”的工程化桥梁如果你和我一样,在过去一年里深度使用过 Claude Code、Cursor 或者 GitHub Copilot,那你一定经历过这种场景:AI 助手噼里啪啦生成了一大堆看起来非常酷炫的代码,你兴…...
数据可视化项目架构全解析:从核心原理到React+ECharts工程实践
1. 项目概述:数据可视化的价值与“SKY-lv/data-visualization”的定位在数据驱动的时代,我们每天都被海量的信息包围。无论是业务报表、用户行为日志,还是传感器采集的时序数据,它们本身只是一堆冰冷的数字。如何让这些数据“开口…...
逆光也能精准识别人脸,门禁不再卡壳
人脸门禁普及的路上,安全质疑从未停止:照片能不能骗过摄像头?视频冒充会不会被放行?尤其在学校、幼儿园、医院等需要高度核验身份的场所,一丁点伪冒漏洞都可能酿成风险。ZUU中优云联ZU-YK751人脸识别门禁终端ÿ…...
车载项目氛围灯功能——音乐律动
车载项目里面很多用到音乐律动,就是根据音乐的响度和频率,对应氛围灯的亮度和颜色,让人看起来跟着音乐在闪动。本文记录了从FWK的傅里叶函数获取响度和频率的方法,封装了一下工具类,留着以后使用package com.demo.func…...
Harbor:统一管理MCP服务器,告别AI助手配置混乱
1. 项目概述:Harbor,一个管理MCP服务器的统一中心如果你和我一样,在日常开发中深度依赖Claude、Cursor这类AI编程助手,那你一定对MCP(Model Context Protocol)服务器不陌生。简单来说,MCP服务器…...
ZYNQ UltraScale+ MPSoC实战:基于PL端AXI_UART16550 IP核与PS端中断机制,实现RS485多帧长数据可靠接收
1. 工业通信场景下的ZYNQ UltraScale MPSoC实战 在工业自动化领域,RS485总线因其抗干扰能力强、传输距离远等优势,成为设备间通信的主流选择。而ZYNQ UltraScale MPSoC凭借其独特的PSPL架构,能够完美应对工业通信中对实时性和可靠性的严苛要求…...
终极指南:如何一键下载网易云音乐无损FLAC格式歌曲
终极指南:如何一键下载网易云音乐无损FLAC格式歌曲 【免费下载链接】NeteaseCloudMusicFlac 根据网易云音乐的歌单, 下载flac无损音乐到本地.。 项目地址: https://gitcode.com/gh_mirrors/nete/NeteaseCloudMusicFlac 你是否曾为无法下载网易云音乐的无损音…...
告别兼容性烦恼:在Vue/React项目中优雅集成sm-crypto国密算法(附IE9+解决方案)
告别兼容性烦恼:在Vue/React项目中优雅集成sm-crypto国密算法(附IE9解决方案) 国密算法作为国内信息安全领域的重要标准,在前端项目中的集成需求日益增长。然而,现代前端框架与老旧浏览器兼容性问题往往成为开发者的拦…...
