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

【网络运维】初见Shell:Shell 变量基础知识

Shell 变量基础知识

什么是 Shell 变量

什么是变量

简单来说,变量就是用一个固定的字符串(由字母、数字和下划线组成,且不能以数字开头)来代替更复杂的内容,这些内容可能包含其他变量、路径、字符串等。

变量是临时存储数据的地方,数据存在于内存中,通过正确调用变量名就可以取出对应的数据。使用变量能让程序开发更加方便,也是编程中必不可少的部分。

下面是一个定义和打印变量的简单示例:

# 定义变量 username,值为 furongwang
[furongwang@shell ~]$ username="furongwang"# 打印变量的值
[furongwang@shell ~]$ echo $username
furongwang

变量赋值的格式是:变量名=值,中间不能有空格。使用 echo $变量名 可以输出变量的值。建议变量内容用双引号 (()) 括起来,避免值中包含空格时出错。


Shell 变量的特性

默认情况下,Shell 不区分变量类型,所有变量(整数、字符串、小数等)都被视为字符串。这与 Java、C 等强类型语言不同。如果需要指定变量类型,可以使用 declare 命令,但一般情况下不需要这样做。


变量类型

根据作用范围,变量可分为两类:

  • 全局变量:在创建它们的 Shell 及其所有子进程中使用。
  • 局部变量:只能在创建它们的 Shell 函数或脚本中使用。

根据是否由用户自定义,也可分为两类:

  • 普通变量:由开发者在脚本中创建。
  • 环境变量:用于定义 Shell 的执行环境,包括自定义和内置的环境变量。

环境变量

环境变量是用 export 命令导出的变量,用于定义 Shell 的运行环境,确保命令正确执行。Shell 通过环境变量确定登录用户名、命令路径、终端类型等。所有环境变量都是全局变量,可用于所有子进程。

环境变量通常在以下文件中定义以实现永久生效:

  • 用户级:~/.bash_profile~/.bashrc(推荐)
  • 全局级:/etc/profile/etc/bashrc/etc/profile.d/

环境变量名通常为大写,例如:

  • EDITOR:默认编辑器
  • HISTSIZE:历史命令个数
  • PATH:命令搜索路径
  • HOME:用户家目录
  • USER:当前用户
  • PWD:当前路径

查看变量的命令:

  • set:显示所有变量(包括局部变量)
  • env:只显示全局变量
  • declare:显示所有变量、函数、整数和已导出的变量

设置环境变量

使用以下任一方式设置环境变量:

export NAME=furongwang
declare -x NAME=furongwang
NAME=furongwang; export NAME

推荐将环境变量定义在 ~/.bashrc(用户级)或 /etc/bashrc(全局级)。


设置登录提示信息

有两种方式设置登录后的提示信息:

  1. 编辑 /etc/motd 文件:
sudo vim /etc/motd
# 添加:welcome to furongwang linux Shell training.
  1. /etc/profile.d/ 下创建脚本:
sudo vim /etc/profile.d/furongwang.sh
# 添加:echo "Welcome to furongwang linux Shell training."

登录前提示由 /etc/issue 控制,登录时间提示由 SSH 配置 PrintLastLog yes 控制。


显示与取消环境变量

  • 使用 echoprintf 打印变量
  • 使用 envset 查看变量
  • 使用 unset 取消变量

环境变量加载顺序

Shell 启动方式不同,加载的环境变量文件也不同:

  1. 登录 Shell

    • /etc/profile
    • /etc/profile.d/*.sh
    • ~/.bash_profile~/.bashrc/etc/bashrc
  2. 非登录交互式 Shell

    • ~/.bashrc/etc/bashrc
  3. 非交互式 Shell(如脚本)

    • 仅加载当前环境中已定义的变量

环境变量小结

  1. 变量名通常大写
  2. 变量在自身 Shell 和子 Shell 中有效
  3. 使用 export 导出环境变量
  4. 使用 env 查看所有环境变量
  5. 使用 $变量名 输出,unset 取消
  6. 在定时任务中最好重新定义所需环境变量
  7. 将永久变量放在 ~/.bashrc/etc/bashrc

普通变量

普通变量仅在当前 Shell 生命周期中有效,退出或启动子进程后无效。


定义普通变量

三种赋值方式:

  • 变量名=value(不加引号)
  • 变量名='value'(单引号)
  • 变量名="value"(双引号)

变量名与变量值规范

  • 变量名:字母、数字、下划线,不能以数字开头
  • 变量值:是否加引号会影响解析行为

示例解析

a=192.168.1.2-$a      # 解析变量后再赋值
b='192.168.1.2-$a'    # 原样输出,不解析变量
c="192.168.1.2-$a"    # 解析变量后再输出
  • 不加引号:解析变量和命令
  • 单引号:原样输出
  • 双引号:解析变量和命令后输出

将命令结果赋值给变量

两种常用方式:

CMD1=`ls`             # 反引号(不推荐)
CMD2=$(pwd)           # $()(推荐)echo $CMD1
echo $CMD2
echo "Today is $(date +%A)."

推荐使用 $(),更清晰易读。


变量定义技巧总结

  1. 变量命名规范

    • 见名知意,推荐使用驼峰或下划线分隔
    • 示例:furongwangAgefurongwang_agefurongwangAgefurongwang_AGE
  2. 赋值方式

    • 普通字符串可不加引号或加双引号
    • 原样输出用单引号
    • 命令解析用 $()
  3. 使用变量

    • 输出时加 $,如 $var${var}
    • unsetexport(()) 等场景中不加 $
  4. 学习建议

    • 参考系统脚本(如 /etc/init.d/functions)中的变量定义方式
    • 形成自己的编码规范和习惯

http://www.dtcms.com/a/343103.html

相关文章:

  • Vue图解!!!Vue的生命周期管理【7】
  • MFC中使用libtorch的实例
  • 【一分钟教程】用ZMC600E实现关节机器人±180度精准转动
  • Ubuntu网络图标消失/以太网卡显示“未托管“
  • 人工智能之数学基础:随机变量和普通变量的区别?
  • 什么是测度?
  • 实践题:智能客服机器人设计
  • 魔乐开发者教程 | 基于openMind实现大模型微调指南(二):大模型微调实操
  • 图像边缘检测
  • Spring AI 入门学习指南
  • 2025.8.21总结
  • CMake使用【c/c++】
  • 2025Java面试红皮书:1000道BAT真题详解
  • plc与plc无线通讯实现PLC1200和ET200SP无线通讯解决方案实践
  • uniapp 懒加载图片
  • 力扣面试150(62/150)
  • SAP FIORI Elements深度定制:注解扩展与审批流程增强完全指南
  • 软件工程 + AI 不是 “硬凑”,3 步走通落地关键环节
  • es6新语法
  • LLaVA-3D,Video-3D LLM,VG-LLM,SPAR论文解读
  • MySQL 时间筛选避坑指南:为什么格式化字符串比较会出错?
  • LMAD:用于可解释自动驾驶的集成端到端视觉-语言模型
  • 自动驾驶架构:人为接口与隐式特征的博弈
  • 杰里708n tws api 简介
  • K-Means 聚类算法详解与实战指南
  • QPS 每秒查询数
  • openEuler系统中如何将docker安装在指定目录
  • Qt5网络编程详细讲解
  • 僵尸进程和孤儿进程
  • Spring相关知识