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

Shell变量与环境变量(自定义配置,灵活复用)

在Linux/Unix Shell编程与日常运维中变量是贯穿始终的核心工具——它就像一个可自定义的“数据容器”能存储文本、数字、路径等各类信息通过灵活配置实现代码复用、环境统一大幅提升操作效率与脚本可维护性。很多新手容易混淆普通Shell变量与环境变量不清楚二者的适用场景与配置方法本文将从基础概念入手手把手教你定义、使用、配置变量实现变量的灵活复用解决实际运维中的高频痛点。一、核心概念搞懂Shell变量与环境变量的区别无论是普通Shell变量还是环境变量本质都是“键值对”变量名变量值核心区别在于作用范围和继承性——这也是决定我们何时用哪种变量的关键。用一句通俗的话总结普通Shell变量是“局部私有”环境变量是“全局共享”。1. 普通Shell变量局部变量普通Shell变量仅在当前Shell会话终端窗口或脚本内部有效不会被子Shell比如脚本执行时启动的新Shell进程继承会话结束或脚本执行完毕后变量自动失效适合存储临时数据、脚本内部临时逻辑。比如在终端中定义一个变量切换终端或关闭窗口后变量就会消失在脚本中定义的局部变量也无法被脚本中调用的其他脚本或命令继承完全“局限于自身范围”。2. 环境变量全局变量环境变量是被“导出”的特殊变量作用范围覆盖当前Shell会话及其所有子Shell、子进程甚至可以配置为系统级全局生效适合存储需要跨会话、跨程序共享的配置信息比如系统路径、用户信息、软件配置等。系统默认自带了很多环境变量如PATH、HOME、USER我们也可以自定义环境变量实现配置的统一管理与全局复用——这也是我们日常运维中最常用的场景比如配置Java、Python等软件的环境路径。3. 核心区别对比新手必记对比维度普通Shell变量环境变量作用范围仅当前Shell会话/脚本内部有效当前Shell及其所有子Shell、子进程有效继承性不被子Shell继承被子Shell、子进程继承生命周期会话结束/脚本执行完毕后失效临时配置随会话结束失效永久配置重启后仍有效适用场景临时存储数据、脚本内部逻辑全局配置、跨程序共享信息、软件环境配置配置方式直接赋值变量名变量值export导出或写入配置文件二、基础实操Shell变量的定义、使用与删除普通Shell变量的操作非常简单核心遵循“定义→使用→修改/删除”的流程新手只需记住几个关键规则就能避免踩坑。1. 定义规则新手高频踩坑点定义Shell变量有严格的语法规则一旦违反就会报错重点记住以下4点变量名与等号之间、等号与变量值之间不能有空格最常见坑正确写法nametest错误写法name test会报错command not found变量名只能由字母、数字、下划线组成不能以数字开头比如var123有效123var无效变量名区分大小写name和NAME是两个完全不同的变量变量值若包含空格、特殊字符如$、!需用双引号或单引号包裹双引号会解析变量单引号则原样输出。2. 定义与使用示例可直接复制实操结合规则我们通过几个实例掌握变量的定义与使用所有命令均基于Bash Shell系统默认标配Zsh等其他Shell兼容基础语法# 1. 定义字符串变量最常用 nameShell运维入门 # 2. 定义数字变量 count10 # 3. 定义带空格的变量需用双引号 descShell变量 灵活复用 # 4. 定义只读变量无法修改、删除适合固定配置 readonly PI3.1415926 # 变量使用在变量名前加$推荐用${变量名}避免拼接歧义 echo $name # 输出Shell运维入门 echo ${count} # 输出10 echo ${desc} # 输出Shell变量 灵活复用 echo ${name}进阶 # 输出Shell运维入门进阶拼接无歧义 # 单引号与双引号的区别 echo 当前计数${count} # 双引号解析变量输出当前计数10 echo 当前计数${count} # 单引号原样输出输出当前计数${count}3. 变量的修改与删除变量定义后可灵活修改无需重新定义删除则需使用unset命令注意只读变量无法修改和删除# 修改变量直接重新赋值 nameShell运维进阶 echo ${name} # 输出Shell运维进阶 # 删除变量unset 变量名 unset count echo ${count} # 输出为空变量已删除 # 只读变量无法修改/删除会报错 PI3.14 # 报错bash: PI: 只读变量 unset PI # 报错bash: unset: PI: 无法取消设定: 只读 variable三、进阶配置环境变量的自定义与全局复用环境变量的核心价值的是“全局共享”我们可以通过两种方式配置环境变量临时配置仅当前会话有效和永久配置重启后仍有效根据实际需求选择即可。1. 临时配置环境变量快速测试用临时配置只需用export命令将普通变量导出为环境变量或直接定义并导出适合临时测试、临时切换环境等场景会话结束后自动失效# 方式1先定义普通变量再导出为环境变量 test_env临时环境变量 export test_env # 方式2一步到位直接定义并导出推荐 export test_env临时环境变量 # 验证启动子Shell查看变量是否继承 bash # 启动子Shell echo ${test_env} # 输出临时环境变量说明已继承 exit # 退出子Shell2. 永久配置环境变量日常运维首选永久配置需要将环境变量写入系统或用户级配置文件重启系统、打开新终端后仍有效分为两种场景用户级仅当前用户生效和系统级所有用户生效。1用户级配置推荐无需root权限配置文件~/.bashrcBash Shell或~/.zshrcZsh Shell仅对当前登录用户生效适合个人常用配置# 1. 编辑配置文件用vim或nano均可 vim ~/.bashrc # 2. 在文件末尾添加自定义环境变量示例 # 自定义软件路径如Python、Java export PYTHON_PATH/usr/local/python3/bin export JAVA_HOME/usr/local/jdk1.8 # 自定义全局变量可跨脚本、跨会话复用 export WORK_DIR/home/user/work export LOG_LEVELINFO # 3. 使配置生效无需重启立即生效 source ~/.bashrc # 验证打开新终端执行以下命令查看是否输出配置值 echo ${PYTHON_PATH} echo ${WORK_DIR}2系统级配置所有用户生效需root权限配置文件/etc/profile所有Shell生效或/etc/bashrc仅Bash生效适合服务器全局配置如所有用户共用的软件环境# 1. 编辑系统级配置文件需root权限 sudo vim /etc/profile # 2. 在文件末尾添加环境变量示例配置系统级Java环境 export JAVA_HOME/usr/local/jdk1.8 export PATH$JAVA_HOME/bin:$PATH # 将Java路径添加到系统PATH # 3. 使配置生效所有用户生效无需重启 source /etc/profile # 验证切换其他用户查看环境变量是否生效 su - otheruser # 切换到其他用户 echo ${JAVA_HOME} # 输出/usr/local/jdk1.8说明生效3. 常用系统内置环境变量直接复用系统默认自带了很多实用的环境变量我们无需自定义可直接复用提升操作效率常用的有$HOME当前用户的家目录如/home/user$USER当前登录用户名$PATH系统命令搜索路径所有可直接执行的命令如ls、cd都在这个路径下$PWD当前工作目录$?上一条命令的执行结果0表示成功非0表示失败常用于脚本判断。四、实战场景变量的灵活复用技巧解决实际问题掌握变量的基础操作后重点是通过自定义配置实现“一次配置多次复用”以下是3个高频实战场景直接套用即可提升运维效率。场景1脚本中复用变量简化维护在编写Shell脚本时将重复使用的值如路径、参数、提示信息定义为变量后续修改只需改一处无需逐个修改脚本中的所有引用大幅提升可维护性。#!/bin/bash # 脚本功能备份网站目录变量复用示例 # 自定义变量一次配置多处复用 BACKUP_DIR/home/backup # 备份目录 SOURCE_DIR/var/www/html # 网站源目录 BACKUP_NAMEwebsite_backup_$(date %Y%m%d).tar.gz # 备份文件名带日期 LOG_FILE${BACKUP_DIR}/backup.log # 日志文件路径 # 复用变量执行备份操作 echo $(date %Y-%m-%d %H:%M:%S) 开始备份... ${LOG_FILE} tar -czf ${BACKUP_DIR}/${BACKUP_NAME} ${SOURCE_DIR} # 复用变量判断备份是否成功 if [ $? -eq 0 ]; then echo $(date %Y-%m-%d %H:%M:%S) 备份成功备份文件${BACKUP_NAME} ${LOG_FILE} else echo $(date %Y-%m-%d %H:%M:%S) 备份失败 ${LOG_FILE} fi场景2全局环境变量配置统一软件路径服务器中安装多个软件如Java、Python、Maven时通过自定义环境变量配置软件路径避免每次执行命令都输入完整路径同时实现所有用户、所有会话的统一复用。# 编辑用户级配置文件 vim ~/.bashrc # 添加以下配置示例配置Python、Maven环境 export PYTHON3_HOME/usr/local/python3 export MAVEN_HOME/usr/local/maven3 # 将软件bin目录添加到PATH实现直接执行命令 export PATH$PYTHON3_HOME/bin:$MAVEN_HOME/bin:$PATH # 使配置生效 source ~/.bashrc # 验证直接执行命令无需输入完整路径 python3 --version # 输出Python版本成功复用环境变量 mvn --version # 输出Maven版本成功复用环境变量场景3交互输入变量提升脚本灵活性通过read命令获取用户输入将输入内容赋值给变量使脚本能够根据不同输入执行不同操作实现“一次编写多种场景复用”。#!/bin/bash # 脚本功能根据用户输入创建指定名称的目录并备份 # 交互输入变量带提示信息 read -p 请输入要创建的目录名称 dir_name read -p 请输入备份目录路径 backup_path # 复用变量执行操作 if [ ! -d ${dir_name} ]; then mkdir -p ${dir_name} echo 目录 ${dir_name} 创建成功 else echo 目录 ${dir_name} 已存在开始备份... # 复用变量执行备份 cp -r ${dir_name} ${backup_path}/${dir_name}_$(date %Y%m%d) echo 备份完成备份路径${backup_path}/${dir_name}_$(date %Y%m%d) fi五、常见问题与避坑指南新手必看1. 变量赋值后echo输出为空核心原因等号两边有空格或变量值包含特殊字符未加引号。解决方案严格遵循定义规则带空格、特殊字符的变量值用双引号包裹。2. 环境变量配置后新终端不生效核心原因配置文件写错如将用户级配置写入系统级文件或未执行source命令使配置生效。解决方案检查配置文件路径配置后执行source 配置文件路径。3. 脚本中定义的变量子脚本无法使用核心原因脚本中定义的是普通Shell变量未导出为环境变量子脚本子Shell无法继承。解决方案在脚本中用export导出变量或用source执行子脚本避免启动新Shell。4. 系统级环境变量配置后部分用户不生效核心原因用户未重新登录或用户的个人配置文件如~/.bashrc覆盖了系统级配置。解决方案让用户重新登录或在用户个人配置文件中添加source /etc/profile。六、总结Shell变量与环境变量的核心价值在于“自定义配置”与“灵活复用”——普通Shell变量解决临时数据存储、脚本内部逻辑复用的问题环境变量解决全局配置、跨会话/跨程序共享的问题。掌握本文的核心要点牢记变量定义规则分清局部与全局的区别熟练运用临时/永久配置方式结合实战场景复用变量就能大幅提升Shell操作与脚本编写的效率避免重复劳动。无论是日常运维中的简单操作还是复杂的Shell脚本开发变量都是你不可或缺的“高效工具”。后续可结合实际需求拓展变量的高级用法如数组变量、命令替换赋值进一步挖掘变量的复用价值让Shell操作更高效、更灵活。

相关文章:

Shell变量与环境变量(自定义配置,灵活复用)

在Linux/Unix Shell编程与日常运维中,变量是贯穿始终的核心工具——它就像一个可自定义的“数据容器”,能存储文本、数字、路径等各类信息,通过灵活配置实现代码复用、环境统一,大幅提升操作效率与脚本可维护性。很多新手容易混淆…...

Shell核心基础命令(下)——系统与权限操作

Shell核心基础命令(下)——系统与权限操作 前言 在Linux系统中,权限管理是系统安全的基石。作为多用户多任务操作系统,Linux通过精细的用户-组-权限模型来控制对系统资源的访问。本文将深入讲解Shell中与系统权限相关的核心命令…...

月入3W+!Java+YOLO接单变现全指南:10个可直接落地的AI视觉项目,全场景覆盖

做Java后端开发的同学,是不是都困在「CRUD死循环」里?每天写重复的业务代码,薪资触顶难突破,想转AI赛道又被Python劝退,学了一堆算法却找不到落地场景,更不知道怎么变现。 我身边有个3年经验的Java开发朋友…...

不记命令也能排障:catpaw chat 实战手册俟

Julia(julialang.org)由Stefan Karpinski、Jeff Bezanson等在2009年创建,目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是: 高性能:编译型语言(JIT&#xff0…...

EF Core 10向量搜索扩展架构设计图泄露事件(内部PPT第7页已证实):这3个设计决策将重写.NET AI应用开发范式

第一章:EF Core 10向量搜索扩展的演进背景与战略定位随着AI应用在企业级系统中加速落地,传统关系型数据库的标量查询能力已难以满足语义检索、相似性匹配等新兴场景需求。EF Core 10首次将向量搜索能力深度融入ORM层,标志着微软在数据访问技术…...

一文搞懂 Cookie、Session 和 Token 的区别

背景 在 Web 应用中,HTTP 是无状态协议,服务器无法自动识别用户身份。为了实现用户登录状态的保持与身份认证,需要引入 Cookie、Session 和 Token 等机制来在多次请求之间维持用户状态 Cookie Cookie 是存储在客户端(浏览器&#…...

Google 迎来「DeepSeek 时刻」:TurboQuant算法实现bit无损、×加速、×压缩、零预处理揪

从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...

多租户下的ERP系统的仓储管理模块分析设计延

springboot自动配置 自动配置了大量组件,配置信息可以在application.properties文件中修改。 当添加了特定的Starter POM后,springboot会根据类路径上的jar包来自动配置bean(比如:springboot发现类路径上的MyBatis相关类&#xff…...

PFC(Power Factor Correction,功率因数校正)

PFC电路的用处用处1:迫使电流与电压同相位,使得用电设备对于电网而言相当于纯阻性负载。当负载呈感性时:电流滞后电压;呈容性时:电流超前电压功率因数越大(接近1.0)说明设备性能越好&#xff0c…...

【赵渝强老师】崖山数据库的体系架构

YashanDB数据库中有数据库和数据库实例这两个基本的概念,并且从体系架构的组成上看,YashanDB数据库又分为了存储结构、进程线程结构和内存结构。因此,要掌握YashanDB的体系架构就需要从数据库与数据库实例入手,并进一步深入到其内…...

亚马逊停止旧款 Kindle 支持,用户与市场面临新变局

2026 年旧款 Kindle 告别 Kindle 商店亚马逊宣布从 2026 年 5 月 20 日起,停止对 2013 年前发布的 Kindle 电子阅读器和 Fire 平板电脑的支持。届时,这些设备将无法访问 Kindle 商店,不能借阅、购买或下载新书籍,但仍可阅读设备上…...

GraalVM Native Image内存优化实战手册(含JDK21+GraalVM24.1插件全链路安装避坑清单)

第一章:GraalVM Native Image内存优化实战手册导论GraalVM Native Image 将 Java 应用提前编译为独立的本地可执行文件,显著降低启动延迟与运行时内存开销。然而,默认构建的 native image 常因反射、动态代理、资源加载等隐式依赖而保留大量未…...

小而强,Meta推出超级智能实验室首款AI模型Muse Spark

文章目录前言二、啥是Muse Spark?说白了就是个"会思考的小机灵鬼"三、"小而强"到底是啥意思?四、不止会聊天,还会"看图说话"五、专门请了1000个医生来"教"它六、从"开源先锋"到"闭源…...

C# 面试高频题:装箱和拆箱是如何影响性能的?伟

OCP原则 ocp指开闭原则,对扩展开放,对修改关闭。是七大原则中最基本的一个原则。 依赖倒置原则(DIP) 什么是依赖倒置原则 核心是面向接口编程、面向抽象编程, 不是面向具体编程。 依赖倒置原则的目的 降低耦合度&#…...

Unity发布京东小游戏圃

从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...

技术分享 | MySQL 8.0复制架构主从自动切换脚本

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

Java原生镜像内存优化实战手册(含AOT编译期内存剖分图谱):从386MB→47MB的7次关键裁剪记录

第一章:Java原生镜像内存优化全景图谱Java 原生镜像(Native Image)通过 GraalVM 的 AOT(Ahead-of-Time)编译技术,将 Java 字节码直接编译为平台原生可执行文件,在启动速度、内存占用和资源效率方…...

​有机溶剂回收设备厂家实测

测评主体公示本次测评对象包括:可迪尔、蓝太克、英飞、艾科,以及有机溶剂回收设备厂家(选取三家技术路径不同的具体设备:厂家A‑活性炭吸附型、厂家B‑沸石转轮浓缩型、厂家C‑冷凝回收型)。 统一测评维度:…...

仅限首批200名开发者获取:Java 25虚拟线程高并发架构迁移评估工具包(含代码扫描器+风险热力图+ROI预测模型)

第一章:Java 25虚拟线程高并发架构迁移全景认知Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,标志着JVM并发模型进入轻量级、高密度、低开销的新纪元。虚拟线程基于Project Loom多年演进,以java.lan…...

案例分析:学术文献综述 Agent Harness

案例分析:学术文献综述 Agent Harness——从手动“文献堆沙”到智能“知识城堡”的AI构建器关键词:学术文献综述 Agent、Agent Harness、多智能体协作、大语言模型应用、学术自动化、知识图谱构建、文献检索-筛选-总结流水线摘要:本文以Chatb…...

从田间到大屏只要1.8秒:PHP异步任务队列+Redis流式渲染农业可视化看板(实测QPS 1270+)

第一章:从田间到大屏只要1.8秒:PHP异步任务队列Redis流式渲染农业可视化看板(实测QPS 1270)在智慧农业场景中,传感器集群每秒上报数千条温湿度、土壤EC值、光照强度等时序数据,传统同步渲染方式导致看板平均…...

PHP容器化落地国产化替代的最后1公里:从Docker镜像构建、OpenEuler适配到等保2.0合规部署(含12项硬性检测项)

第一章:PHP容器化部署国产化适配方案在信创背景下,PHP应用需适配国产操作系统(如统信UOS、麒麟V10)、国产CPU架构(鲲鹏、飞腾、海光、兆芯)及国产中间件生态。容器化是实现跨平台一致部署与国产环境快速迁移…...

环境变量-代理/PowerShell乱码

设置代理[Environment]::SetEnvironmentVariable(HTTP_PROXY, socks5://127.0.0.1:5800, User) [Environment]::SetEnvironmentVariable(HTTPS_PROXY, socks5://127.0.0.1:5800, User) [Environment]::SetEnvironmentVariable(ALL_PROXY, socks5://127.0.0.1:5800, User) Write…...

NVIDIA Profile Inspector:深度优化显卡性能的游戏技术解决方案

NVIDIA Profile Inspector:深度优化显卡性能的游戏技术解决方案 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 在游戏运行过程中,用户常常面临帧率不稳定、画面撕裂、输入延迟高…...

南京道尔斯特机架式PDU重新定义工业级安全电源管理新范式

在数字化基建加速迭代、工业互联网深度渗透的现在,电力分配作为工业数字底座的关键枢纽,其安全性、可靠性与智能化水平​行业痛点凸显:传统电源方案难以适配工业高负载场景刚需​当前,随着GPU服务器、工业PLC、精密医疗设备等大功…...

手机扩大屏定制厂家:菲涅尔高清模压技术护航跨境出海

在跨境电商快速发展的如今,手机屏幕放大器作为移动配件领域的细分品类,正在成为全球卖家关注的焦点。然而,货源不稳定、产品同质化、知识产权风险、镜片清晰度不佳等行业痛点,始终困扰着跨境电商从业者。如何找到一家技术过硬、供…...

Yu-AI-Agent 项目(AI 恋爱大师智能体) · 学习笔记

Yu-AI-Agent 项目(AI 恋爱大师智能体) 学习笔记 本项目是 AI 超级智能体 项目的 Java 前后端部分,学习自 鱼皮 编程导航 的 AI 开发实战课程及开源代码仓库。 基于 Spring Boot 3 Java 21 Spring AI 构建了 AI 恋爱大师应用与 ReAct 模式…...

如何释放CPU全部潜能:CPUDoc智能优化工具完全指南

如何释放CPU全部潜能:CPUDoc智能优化工具完全指南 【免费下载链接】CPUDoc 项目地址: https://gitcode.com/gh_mirrors/cp/CPUDoc 你是否经常感觉电脑性能未能充分发挥?明明配置不错的硬件,却在运行大型软件或游戏时出现卡顿&#xf…...

【Hot 100 刷题计划】 LeetCode 74. 搜索二维矩阵 | C++ 二分查找 (一维展开法)

LeetCode 74. 搜索二维矩阵 📌 题目描述 题目级别:中等 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target…...

凌晨 6 点,裁员 3 万:AI时代最残酷的一幕来了

3月31日凌晨6点,很多甲骨文(Oracle)员工还在睡梦中,手机突然亮了。一封来自“Oracle Leadership”(甲骨文管理层)的邮件,只有短短几句话:“经过仔细评估公司当前业务需要&#xff0c…...