Shell脚本-变量是什么
在Shell脚本编程中,变量是一个非常基础且重要的概念。它们用于存储数据,并可以在整个脚本中引用这些数据来执行各种操作。理解如何定义、使用和管理变量是编写有效Shell脚本的关键。本文将详细介绍Shell脚本中的变量,包括其基本概念、类型以及一些实用的技巧。
一、什么是变量?
在Shell脚本中,变量就像是一个容器,它可以用来存储字符串、数字等不同类型的数据。变量名通常由字母、数字或下划线组成,并且不能以数字开头。值得注意的是,在Shell脚本中,变量名区分大小写。
(一)变量的基本用法
定义变量时,直接指定变量名并赋值即可,不需要声明变量类型(因为Shell是弱类型的)。引用变量时,则需要在变量名前加上$
符号。
示例:
my_var="Hello, World!"
echo $my_var
输出结果:
Hello, World!
(二)变量命名规则
- 变量名只能包含字母(a-z,A-Z)、数字(0-9)和下划线(_)。
- 变量名不能以数字开头。
- 建议采用有意义的名字,提高代码可读性。
二、变量的类型
尽管Shell脚本不强制要求变量类型,但根据用途可以将变量分为几类:
(一)字符串变量
最常见的变量类型,用于存储文本信息。
示例:
greeting="Welcome to the world of Shell scripting"
echo "$greeting"
(二)数值变量
虽然Shell脚本支持数学运算,但在进行算术运算时需要特别注意变量的处理方式。
示例:
num1=5
num2=3
sum=$((num1 + num2))
echo "The sum is $sum"
(三)环境变量
环境变量是由操作系统提供的特殊变量,用于向程序提供配置信息。常见的环境变量有PATH
、HOME
等。
示例:
echo "Your home directory is: $HOME"
echo "Current PATH is: $PATH"
(四)位置参数
当执行一个脚本时传递给它的参数称为位置参数,可以通过$1
, $2
, ..., $n
访问。
示例:
假设有一个脚本greet.sh
:
echo "Hello, $1. Welcome to $2."
运行:./greet.sh Alice CSDN
输出:Hello, Alice. Welcome to CSDN.
三、变量的操作
(一)变量替换
在Shell脚本中,可以使用多种方式进行变量替换,如默认值、空值检查等。
示例:
# 使用默认值
username=${USER:-defaultUser}
echo "Username: $username"# 检查变量是否为空
filename=${1?"No filename provided"}
echo "Filename: $filename"
(二)变量修改
Shell还允许对变量的内容进行搜索和替换。
示例:
text="hello world"
echo ${text/hello/bash}
输出:bash world
(三)变量长度
可以获取字符串变量的长度。
示例:
str="Hello, World!"
echo ${#str}
输出:13
四、变量的作用域
(一)局部变量
仅在当前shell会话或函数内部有效的变量。在函数内部使用local
关键字定义局部变量。
示例:
function testLocalVar {local localVar="I am local"globalVar="I am global"echo "Inside function: $localVar"
}testLocalVar
echo "Outside function: $localVar" # 这里不会输出任何内容
echo "Global variable: $globalVar"
(二)全局变量
在整个shell脚本中都有效的变量,默认情况下所有在脚本中定义的变量都是全局变量。
五、结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!
相关文章:
Shell脚本-变量是什么
在Shell脚本编程中,变量是一个非常基础且重要的概念。它们用于存储数据,并可以在整个脚本中引用这些数据来执行各种操作。理解如何定义、使用和管理变量是编写有效Shell脚本的关键。本文将详细介绍Shell脚本中的变量,包括其基本概念、类型以及…...
空调制冷量和功率有什么关系?
空调的制冷量和功率是衡量空调性能的两个核心参数,二者既有区别又紧密相关,以下是具体解析: 1. 基本定义 制冷量(Cooling Capacity)指空调在单位时间内从室内环境中移除的热量,单位为 瓦特(W) 或 千卡/小时(kcal/h)。它直接反映空调的制冷能力,数值越大,制冷效果越…...
天梯赛树学合集
天梯赛关于树的知识考的还是就比较多的 1.PTA | 程序设计类实验辅助教学平台 #include<bits/stdc.h> using namespace std; int n; int root,a[2000]; int f1,g1; void dfs1(int l,int r){if(f0) return;int bala[l];if(r-l1<2) return;for(int il1;i<r;i){if(a[…...
今日多肽之——订书肽
订书肽是一种具有特殊结构和性质的新型多肽,在科研领域有重要应用,以下是具体介绍: 定义 订书肽是基于多肽形成 α- 螺旋以穿过细胞膜进入细胞的需求发展起来的。2000 年,Verdine 等发展了一种用碳碳键作为支架来稳定多肽 α- 螺…...
SonarQube 集成教程
SonarQube 集成教程 SonarQube(原名 Sonar) [3] 是由 SonarSource 开发的一个开源平台,使用java开发,用于对代码质量进行持续检查,通过静态分析代码自动进行审查,以检测 29 种编程语言的错误和代码异味。S…...
最优树搜索策略
1. Hill Climbing (爬山算法) 1.1 算法思路 爬山算法是一种简单的局部搜索算法,旨在通过不断选择当前状态的“最优”邻居来寻找全局最优解。该算法的核心思想是通过不断朝着某个方向改进来寻找解,直到没有更好的邻居可选为止。 具体步骤: …...
java基础问题
1. 数组扩充 new ArrayList(20) 扩容问题 这样初始化,没有发生扩容。在使用时若容量不够用了才会发生扩容。 当容量超过20个时会发生1.5倍原容量的扩容 如:容量加到 < 30 个。会扩容到 30 个。 若容量加到 > 30个,如31个࿰…...
2025年人工智能指数报告(斯坦福)重点整理
在今天的AI简报中,我将分享斯坦福大学以人为本人工智能研究所(HAI)于2025年4月7日发布的《2025年AI指数报告》的精彩内容。这是该年度报告的第八版,它提供了全球AI格局的详细信息和分析,包括全球应用、出版物、专利、资…...
驱动移植【简略版】
一、RTC时钟 测试一下看看能不能用就行 二、LED指示灯驱动 1.在设备树找到LED的节点,改对应的引脚, 2.还需要注意引脚的复用引脚有没有被其它东西占用,可以通过NXP官方提供的cofingue tool软件去查看,注释掉就行 三、RJGT102加…...
Qt QTimer 详解与使用指南
Qt QTimer 详解 QTimer 是 Qt 中用于实现定时器功能的类,通过周期性地触发 timeout() 信号来执行任务。以下从核心用法、高级功能、注意事项及示例代码等方面进行详细解析。 1. 基本用法 步骤: 创建对象:实例化 QTimer,通常指定…...
PDK中technology file从tf格式转换为lef格式
在数字后端流程中需要导入technology file工艺文件,一般传统的PDK中都提供.tf形式,能够在Synopsys ICC中进行导入。但是由于Cadence Innovus不断地完善,更多的工程采用了其进行数字后端设计。不过Cadence Innovus导入的是.lef格式的工艺文件&…...
Spring Boot资源耗尽问题排查与优化
Spring Boot服务运行一段时间后新请求无法处理的问题。服务没有挂掉,也没有异常日志。思考可能是一些资源耗尽或阻塞的问题。 思考分析 首先,资源耗尽可能涉及线程池、数据库连接、内存、文件句柄或网络连接等。常见的如线程池配置不当,导致…...
图+文+语音一体化:多模态合成数据集构建的实战与方法论
目录 图文语音一体化:多模态合成数据集构建的实战与方法论 一、多模态合成数据的核心价值 二、系统架构概览 三、核心模块与实现建议 ✅ 1. 文→图:图像合成(Text-to-Image) ✅ 2. 图→文:自动描述(I…...
java的lambda和stream流操作
Lambda 表达式 ≈ 匿名函数 (Lambda接口)函数式接口:传入Lambda表达作为函数式接口的参数 函数式接口 只能有一个抽象方法的接口 Lambda 表达式必须赋值给一个函数式接口,比如 Java 8 自带的: 接口名 作用 Functio…...
Excalidraw:一个免费开源的白板绘图工具
Excalidraw 是一款免费开源的白板绘图工具,主打手绘风格,界面简洁易用,支持实时协作。它常用于绘制技术架构图、流程图、线框图、思维导图等,尤其适合需要快速草图设计的场景。 Excalidraw 支持的主要功能如下: &…...
推荐一款Umi-OCR_文字识别工具
Umi-OCR_文字识别工具 https://github.com/hiroi-sora/Umi-OCR/releases/latest...
leetcode0146. LRU 缓存-medium
1 题目:LRU 缓存 官方标定难度:中 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓…...
单线服务器有什么优点
单线服务器是一个普遍存在的术语,它是指一种服务器连接互联网时只使用一个物理线路的服务器。简单来说,就是使用一条网络线路的服务器,上传和下载的数据都通过一个通道实现。在当今数字化的时代,服务器的选择至关重要。今天&#…...
Manus AI:突破多语言手写识别技术壁垒之路
Manus AI与多语言手写识别 讨论Manus AI如何突破多语言手写识别的技术壁垒。 写一篇详细的博客有重点有链接超详细 Manus AI:突破多语言手写识别技术壁垒之路 在人工智能领域,多语言手写识别一直是极具挑战性的难题。不同语言的字符形态、书写规则大相…...
pip 的包下载之后存放在哪?
以下是关于 pip 下载的包存放位置的详细说明,适用于不同操作系统场景: 一、临时缓存位置 当使用 pip install 安装包时,下载的包会先暂存在 临时缓存目录,安装完成后自动删除。以下是各系统默认路径: 操作系统缓存路…...
文章记单词 | 第38篇(六级)
一,单词释义 distress [dɪˈstres] n. 悲痛;苦恼;忧虑;贫困;危难;不幸 v. 使悲痛;使苦恼;使忧虑odor [ˈəʊdə(r)] n. 气味;(尤指)难闻的气味…...
L2-006 树的遍历
L2-006 树的遍历 问题描述格式输入格式输出样例输入样例输出评测用例规模与约定解析参考程序难度等级 问题描述 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 格式输入 输入第一行给出一个正整数N࿰…...
在国产麒麟Kylin Linux Advanced Server V10中使用QT5开发环境并支持中文输入
切记:不要安装第三方源的工具包,包括QT官网的!!! 在联网的情况下按以下步骤安装即可: sudo yum groupinstall "Development Tools" -y sudo yum install qt5-qtbase-devel qt5-qtdeclarative-d…...
C语言动规学习
文章目录 一、动态规划的基本概念1. 最优子结构2. 重叠子问题 二、动态规划的求解步骤三、动态规划与递归的比较四、例题(只讲思维,空间时间复杂度大小不与题目比较)1、斐波那契数列1. 定义状态2. 找出状态转移方程3. 初始化边界条件4. 确定计…...
Vue3中provide和inject的用法示例
在 Vue3 中,provide 和 inject 用于实现跨层级组件通信。以下是一个简单的示例: 1. 父组件 (祖先组件) - 提供数据 javascript 复制 // ParentComponent.vue import { provide, ref, reactive } from vue;export default {setup() {// 提供静态数据p…...
fastdds:传输层SHM和DATA-SHARING的区别
下图是fastdds官方的图,清晰地展示了dds支持的传输层: 根据通信双方的相对位置(跨机器、同机器跨进程、同进程)的不同选择合适的传输层,是通信中间件必须要考虑的事情。 跨机器:udp、tcp 跨机器通信,只能通过网络, f…...
MQ基础篇
1.初识MQ 1.同步调用 概念: 同步调用是一种程序执行方式,在调用一个函数或服务时,调用方会一直等待被调用方执行完成并返回结果,才会继续执行后续代码 ,期间调用线程处于阻塞状态。 同步调用的优势: 时…...
网络编程2
day2 一、UDP编程 1.编程流程 2.函数接口 3.注意 (1)、对于TCP是先运行服务器,客户端才能运行。(2)、对于UDP来说,服务器和客户端运行顺序没有先后,因为是无连接,所以服务器和客户端谁先开始,没有关系.(3)、一个服务器…...
Python环境中在线训练机器学习模型所遇到的问题及解决方案
我最近开发个智能控制系统,包括实时数据采集、预测、策略优化等功能,最近增加在线学习功能,也就是在线进行模型训练,在线进行模型训练时出现了问题,现象为: 控制台报: cmdstanpy - INFO - Chain [1] start processing所有任务、线程停止,Web服务登录无法访问后台的pyt…...
「仓颉编程语言」Demo
仓颉编程语言」Demo python 1)# 仓颉语言写字楼管理系统示例(虚构语法)# 语法规则:中文关键词 类Python逻辑定义 写字楼管理系统属性:租户库 列表.新建()报修队列 列表.新建()费用单价 5 # 元/平方米方法 添加租户(名称, 楼层, 面积):…...
《软件设计师》复习笔记(11.4)——处理流程设计、系统设计、人机界面设计
目录 一、业务流程建模 二、流程设计工具 三、业务流程重组(BPR) 四、业务流程管理(BPM) 真题示例: 五、系统设计 1. 主要目的 2. 设计方法 3. 主要内容 4. 设计原则 真题示例: 六、人机界面设…...
win11系统截图的几种方式
在 Windows 11 中,系统内置的截图功能已全面升级,不仅支持多种截图模式,还整合了录屏、OCR 文字识别和 AI 增强编辑等功能。以下是从基础操作到高阶技巧的完整指南: 一、快捷键截图(效率首选) 1. Win Sh…...
http://noi.openjudge.cn/——2.5基本算法之搜索——1998:寻找Nemo
文章目录 题目宽搜代码优先队列深搜代码小结 题目 总时间限制: 2000ms 内存限制: 65536kB 描述 Nemo 是个顽皮的小孩. 一天他一个人跑到深海里去玩. 可是他迷路了. 于是他向父亲 Marlin 发送了求救信号.通过查找地图 Marlin 发现那片海像一个有着墙和门的迷宫.所有的墙都是平行…...
win10系统完美配置mamba-ssm全整合方案
好久没瞎写东西了,刚好最近遇到一个逆天需求:要在win10平台上配置可用的mamba-ssm环境。由于这个环境原版以及相关依赖都是仅适配linux的,即使是依赖conda环境直接拿来往windows系统上装也全是bug,网上大量的垃圾教程也都是错的&a…...
MQTTClient.c中的协议解析与报文处理机制
MQTTClient.c中的协议解析与报文处理机制 1. 协议解析的核心逻辑 (1)报文头部解析 MQTT协议报文由固定头(Fixed Header) 可变头(Variable Header) 负载(Payload)三部分组成。在rea…...
LeetCode每日一题4.18
2364.统计坏数对的数目 问题 问题分析 根据题目要求,(i, j) 是一个坏数对的条件是: i < j j - i ! nums[j] - nums[i],即 nums[j] - j ! nums[i] - i 因此,我们可以转换问题:对于每个 j,找到所有 i &l…...
cmd查询占用端口并查杀
查看特定端口的占用情况 netstat -ano | findstr 端口号 netstat -ano | findstr 端口号 结束指定进程 askkill /T /F /PID PID askkill /T /F /PID PID...
ETL数据集成平台在交通运输行业的五大应用场景
在智能交通与数字物流时代,交通运输企业每天产生海量数据——车辆轨迹、货物状态、乘客流量、设备日志……但这些数据往往被困在分散的系统中:GPS定位数据躺在车载终端里,物流订单卡在Excel表中,地铁客流统计锁在本地服务器内。如…...
自定义 el-menu
使用的工具:vue2 element-ui <!DOCTYPE html> <html><head><link rel"stylesheet" href"https://unpkg.com/element-ui/lib/theme-chalk/index.css"><style>.el-menu--horizontal {border-bottom: none !impor…...
创维E900V20C-国科GK6323V100C-rtl8822cs-安卓9.0-短接强刷卡刷固件包
创维E900V20C/创维E900V20D-国科GK6323V100C-安卓9.0-强刷卡刷固件包 创维E900V20C 刷机说明: 1、用个老款4G,2.0的U盘,fat32,2048块单分区格式化, 5个文件复制到根目录,插盒子靠网口U口&…...
DemoGen:用于数据高效视觉运动策略学习的合成演示生成
25年2月来自清华、上海姚期智研究院和上海AI实验室的论文“DemoGen: Synthetic Demonstration Generation for Data-Efficient Visuomotor Policy Learning”。 视觉运动策略在机器人操控中展现出巨大潜力,但通常需要大量人工采集的数据才能有效执行。驱动高数据需…...
影楼精修-高低频磨皮算法解析
注意:本文样例图片为了避免侵权,均使用AIGC生成; 高低频磨皮基础 高低频磨皮是一种常用于人像后期修图的技术,它能在保留皮肤纹理的同时柔化瑕疵,使皮肤看起来更加自然细腻。高低频磨皮的算法原理如下: …...
打造搜索神功:Express 路由中的关键词探查之道
前言 在 Web 开发的江湖,Express 好比一位身怀绝技的武林高手,出手稳准狠,擅长解决各种疑难杂症。今天,我们将与这位高手并肩作战,一探关键词搜索路由的奥义。这不是枯燥的教学,而是一场充满玄机与笑点的江湖奇遇。挥起代码之剑,踏上探索之路,不仅能习得招式,还能在轻…...
kubernetes-使用ceph-csi
kubernetes-使用ceph-csi Kubernetes (简称K8s)和Ceph都是开源的云计算技术,K8s是一个容器编排平台,而Ceph是一个分布式存储系统。将K8s和Ceph集成在一起可以为应用程序提供高可用性和持久性存储。本文主要介绍如何在使用openEul…...
从Shell到域控:内网渗透中定位域控制器的8种核心方法
在内网渗透中,定位域控制器(Domain Controller, DC)是攻防对抗的关键环节。本文结合实战经验与工具技术,总结出8种从Shell快速发现域控主机的方法,涵盖命令探测、网络扫描、日志分析等维度,助你系统…...
FA-YOLO:基于FMDS与AGMF的高效目标检测算法解析
本文《FA-YOLO: Research On Efficient Feature Selection YOLO Improved Algorithm Based On FMDS and AGMF Modules》针对YOLO系列在特征融合与动态调整上的不足,提出两种创新模块:FMDS(细粒度多尺度动态选择模块)和AGMF(自适应门控多分支聚焦融合模块)。论文结构…...
【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-结束和重新开始游戏
结束和重新开始游戏 文章目录 结束和重新开始游戏1、概述2、更新Globals.h3、触发GAME_WON和GAME_LOST事件4、对游戏结束的反应5、重启游戏6、创建新游戏按钮7、完整代码8、总结在本文中,将实现胜负检测并添加重新开始功能以完成游戏循环。 1、概述 在本文中,我们将更新我们…...
OpenAI重返巅峰:o3与o4-mini引领AI推理新时代
引言 2025年4月16日,OpenAI发布了全新的o系列推理模型:o3和o4-mini,这两款模型被官方称为“迎今为止最智能、最强大的大语言模型(LLM)”。它们不仅在AI推理能力上实现了质的飞跃,更首次具备了全面的工具使…...
《软件设计师》复习笔记(12.3)——质量管理、风险管理
目录 一、质量管理 1. 质量定义 2. 质量管理过程 3. 软件质量特性(GB/T 16260-2002) 4. 补充知识 McCall质量模型: 软件评审 软件容错技术 真题示例: 二、风险管理 1. 风险管理的目的: 2. 风险管理流程及内…...
优化自旋锁的实现
在《C11实现一个自旋锁》介绍了分别使用TAS和CAS算法实现自旋锁的方案,以及它们的优缺点。TAS算法虽然实现简单,但是因为每次自旋时都要导致一场内存总线流量风暴,对全局系统影响很大,一般都要对它进行优化,以降低对全…...