Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Linux】Shell 变量:你不知道的那些事

【Linux】Shell 变量:你不知道的那些事

作者头像
行者Sun
发布于 2024-09-14 06:58:17
发布于 2024-09-14 06:58:17
20100
代码可运行
举报
文章被收录于专栏:LinuxLinux
运行总次数:0
代码可运行

基本介绍

1、Shell 的概念

Linux 系统中,Shell 是用户与内核之间交互的接口程序,为用户提供使用操作系统的接口,也被称为命令解释器。Shell 接收用户输入的命令,并将其转换为 Linux 系统可以理解的操作,最终通过调用相应的程序来完成这些操作。

2、变量的概念

在 Linux Shell 中,变量通常用于存储全局数据、局部数据或临时数据。

变量的一般定义格式如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<变量名>=<变量值>

# 示例:var=123

定义变量时,需要注意以下几点:

  • 等号(=)两边不能有空格,否则会出现 command not found 报错
  • 变量名区分大小写
  • 变量名中只能包含字母、数字、下划线,且不能以数字开头
  • 变量名中避免使用 Shell 关键字,如 if、then、for、do、done、while、case、function 等
  • 变量名中避免使用特殊符号和空格
  • 变量名中尽量使用大写字母表示常量
  • 变量值中如果包含空格,应当使用单引号 '' 或双引号 "" 将变量值括起来,作为字符串使用

变量的数据类型

1、字符串(String)

在 Linux Shell 中,字符串是最常用的数据类型,主要用于存储文本信息:

  • 变量值可以包含字母、数字、特殊符号和空格
  • 变量值可以用单引号 ''、双引号 "" 或不加引号

如果没有特别的声明,所有 Shell 变量在赋值后,其对应的变量值都是以字符串的形式存储的,即使变量值看起来是数字,因此以下变量定义都是等价的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var=123var='123'var="123"

2、整数(Integer)

在 Linux Shell 中,可以使用 declare -i 或 let 命令将变量声明为整数,变量值只能包含数字。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -i var=123let var=123

3、数组(Array)

在 Linux Shell 中,可以使用 declare -a 命令将变量声明为数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -a var=(1 2 3)

🔔 其中 var[0]=1var[1]=2var[2]=3

4、只读变量(Readonly)

在 Linux Shell 中,可以使用 declare -r 命令或 readonly 命令将变量声明为只读。

只读变量一旦赋值后,其变量值将不能被改变,再次赋值会出现 readonly variable 提示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
declare -r var=123
或
readonly var=123

🔔 此时执行 var=aaa,会出现 var: readonly variable 提示

变量的作用类型

1、环境变量

环境变量也称为系统变量,是一种全局变量,在当前 Shell 以及所有子 Shell 中均可以全局使用。

  • Linux 系统内置的环境变量如下
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PATH         # 定义了系统搜索可执行文件的目录路径,多个目录通常用冒号 : 分隔
HOME         # 用户的主目录
SHELL        # 用户当前使用的 Shell 类型
USER         # 当前登录用户的用户名
LOGNAME      # 当前登录用户的用户名,与 USER 通常相同
HOSTNAME     # 系统主机名
LANG         # 设置系统的语言和字符编码
LC_ALL       # 同时设置语言和区域设置的所有类别
TERM         # 定义了终端类型,用于控制终端的外观和行为
PS1          # 定义了命令行提示符的格式
HISTSIZE     # 定义了历史命令列表的大小
MAIL         # 定义了邮件文件的路径,Shell 会检查这个文件是否有新邮件
PATH_INFO    # 在 CGI 脚本中,包含了请求的路径信息
SERVER_NAME  # 在 CGI 脚本中,包含了服务器的主机名
SERVER_ROOT  # 在 CGI 脚本中,包含了服务器的根目录
PWD          # 当前工作目录的完整路径
RANDOM       # 每次读取时都会提供一个随机数
SECONDS      # 自 Shell 启动以来经过的秒数
SHLVL        # 当前 Shell 层级,每启动一个新的 Shell,这个值就会增加
UID          # 当前用户的用户 ID
GID          # 当前用户的主组 ID
-------------------------------------------------------------
$0:表示当前执行的 Shell 脚本名称
$*:表示所有传递给 Shell 脚本或函数的参数
$@:表示所有传递给 Shell 脚本或函数的参数
$$:当前 Shell 的进程号
$?:表示上一个命令的退出状态
$#:表示当前 Shell 脚本位置参数的个数

🔔 $* 与 $@ 的区别:
1)不加双引号的时候,将传递参数通过空格分隔后进行循环遍历,没有区别
2)加双引号的时候
  a)$* 会将传递的参数作为一个字符串变量进行循环遍历
  b)$@ 会将传递参数通过空格分隔后作为多个独立变量进行循环遍历
  • 用户也可以通过 export 命令或 declare -x 命令声明自定义的环境变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export NGINX_HOME="/etc/nginx"
或
declare -x NGINX_HOME="/etc/nginx"

2、本地变量

本地变量是一种局部变量,只在当前 Shell 以及脚本函数中可以使用,子 Shell 无法获取。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var=123
或在 Shell 脚本的函数中
local var=123

3、位置变量

位置变量通常用于为 Shell 脚本或函数传递所需的参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$1:表示传递给 Shell 脚本或函数的第 1 个参数
$2:表示传递给 Shell 脚本或函数的第 2 个参数
...
以此类推

变量的相关操作

1、查看变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看变量值
echo $var
或
echo ${var}           # 推荐方式
或
echo "${var}"         # 推荐方式,如果包含空格不容易出现异常

# 查看所有变量
env                   # 查看所有环境变量
或
export                # 查看所有环境变量,还可以显示环境变量的定义命令
或
set                   # 查看所有环境变量和自定义变量

🔔 env、exportset 比较:
# env 命令用于查看环境变量,或在执行命令时临时设置环境变量
# export 命令用于将 Shell 变量设置为环境变量,使其在子进程中可用
# set 命令用于查看和设置 Shell 变量,以及修改 Shell 的行为

2、特殊赋值

  • 可以将一个变量的值赋给另一个变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var1=123
var2=$var1
  • 可以将 Shell 命令的执行结果赋值给一个变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var=$(pwd)

3、变量值操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 替换字符串
${var/old/new}                    # 替换一个匹配的字符串
${var//old/new}                   # 替换全部匹配的字符串
# 删除字符串
${var/old}                        # 删除一个匹配的字符串
${var//old}                       # 删除全部匹配的字符串
# 变量赋值
${var:=value}                     # 设定默认值
${var:+value}                     # 临时赋值值
${var:-value}                     # 不赋值,仅打印
# 变换字符串
${var^}                           # 首字符大写
${var^^}                          # 所有字符大写
${var,}                           # 首字符小写
${var,,}                          # 所有字符小写
# 统计字符串长度
${#var}
# 样式匹配
${var#样式}          # 从前向后删除,匹配最短样式
${var##样式}         # 从前向后删除,匹配最长样式
${var%样式}          # 从后向前删除,匹配最短样式
${var%%样式}         # 从后向前删除,匹配最长样式
🔔 示例
tmp='hostname_192.168.0.1#031a2caf-cf56-44fa-af7a-6a4ab00456b3'
echo ${tmp#*#} 结果为:031a2caf-cf56-44fa-af7a-6a4ab00456b3
echo ${tmp%_*} 结果为:hostname

4、永久环境变量

直接在 Shell 中执行 export 命令自定义的环境变量,仅对当前用户、当前 Shell 生效,如果需要永久生效,需要修改配置文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 方式一
# 在 ~/.bashrc 或 ~/.bash_profile 中添加
export NGINX_HOME="/etc/nginx"
🔔 仅对当前用户永久有效,需要重新打开 Shell 会话 或 执行 source 命令生效
# 方式二
# 在 /etc/bashrc 或 /etc/profile 或 /etc/environment 中添加
export NGINX_HOME="/etc/nginx"
🔔 对所有用户永久有效,需要重新打开 Shell 会话 或 执行 source 命令生效
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 实施运维知识交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
shell变量详解
在编程中,我们总有一些数据需要临时存放在内存,以待后续使用时快速读出。先了解一下计算机的存储单位吧。
星哥玩云
2022/09/15
6250
shell变量详解
什么是Shell的变量和数组?如何定义与使用?
1)本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。
reload
2024/08/01
4200
什么是Shell的变量和数组?如何定义与使用?
Shell 编程(2)- 变量
变量存在于内存中,变量有变量名识别,调用变量时使用"$变量名",标记变量的是变量名。
懒人的小脑
2019/01/25
8580
Shell 编程(2)- 变量
Shell编程-变量
作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2024/11/01
910
Shell编程-变量
Shell编程 --- 变量
(2).如果按作用范围的话,可分为自定义变量和环境变量(后面会将自定义变量和环境变量)。
帅地
2018/08/30
9240
Shell编程 --- 变量
Linux的shell命令——变量用法
在Linux的Shell脚本中,变量是用来存储和操作数据的符号名称。下面是关于Linux Shell中变量的详细说明:
红目香薰
2023/10/11
1.4K0
Linux的shell命令——变量用法
shell_环境变量_常量_位置变量_运算(3)
文章目录 保存永久环境变量 常量 位置变量 ln -s 源文件 连接文件 ls |wc -l pidof shift $? pstree -p f1.sh bash中的算术运算 bash随机数生成器
以某
2023/03/07
7160
Shell特殊变量和命令行参数详解
1.shell变量基础 shell变量是一种很“弱”的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义。 所以若要进行数学运算,必须使用一些命令例如let、declare、exp
小小科
2018/05/04
2.6K0
Shell特殊变量和命令行参数详解
一文掌握shell脚本的基本语法
欢迎大家star我的GitHub:https://github.com/SolerHo/geeks-shell,建议直接使用GitHub来查看排版,发现markdown有错位的情况。
阳光罗诺
2022/01/03
4.3K0
一文掌握shell脚本的基本语法
NO.3 Shell脚本
程序在执行之前需要一个专门的编译过程,把程序编译成 为机器语言文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++
py3study
2020/01/10
9030
Linux shell编程常用方法总结
shell变量是shell设置的特殊变量,也是shell正确运行所必须的。分为局部变量和环境变量。
Linux兵工厂
2023/02/28
2.8K0
Linux shell编程常用方法总结
linux的shell编程入门
Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。每一个合格 的Linux系统管理员或运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅 读系统及各类软件附带的Shell脚本内容。只有这样才能提升运维人员的工作效率,适 应曰益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础
狼啸风云
2022/09/30
8.2K0
linux的shell编程入门
Linux Shell基础篇二 - 变量
系统环境变量是系统提供的共享变量,是linux系统加载Shell的配置文件中定义的变量共享给所有的Shell程序使用。环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。
兜兜转转
2023/03/08
2.9K1
Linux Shell基础篇二 - 变量
shell脚本应用的基本概念
在shell脚本中,#表示注释,编写好的shell脚本可以通过“./脚本名”的方式执行脚本,但是需要文件本身具有x权限,还可以通过内部命令“source”或者“.”来加载文件中的源代码执行,“source”可简写为“sh”。
小手冰凉
2019/09/10
1.5K0
Shell基础
Linux系统下常见的四种变量 1.自定义变量 自定义变量是由系统用户自己定义的变量吗,只在用户自己的Shell环境中有效,因此,也有人称为本地变量。在编写Shell脚本程序是,用户通常会设定一些特定的自定义变量,以适应程序执行过程中各种变化,以满足不同的需求。
剧终
2020/08/26
9110
Shell编程从看懂到看开①(Shell概述、变量、运算符、条件判断)
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。==Shell 既是一种命令语言(可以理解为命令行解释器),又是一种程序设计语言。==
十八岁讨厌编程
2022/12/10
8840
Linux 下Shell变量,环境变量的联系与区别
Shell变量,又称本地变量,包括私有变量以及用户变量,不同类的shell有不同的私有变量,bash,ksh,csh等,每种shell的私有变量都不一样
授客
2019/09/12
2.9K0
shell基础 — 基本语法
  在 shell 里,使用变量之前通常并不需要事先为他们做出声明,需要使用的时候直接创建就行了。默认情况下,所有变量都被看做字符串并以字符串来存储,即使它们被赋值为数值时也是如此。shell 和一些工具会在需要时把数值型字符串转换成对应的数值以对它们进行操作。
全栈程序员站长
2022/07/18
3.5K0
shell基础 — 基本语法
shell基础
计算机只能认识(识别)机器语言(0和1),如(11000000 这种)。但是,我们的程序猿们不能直接去写01这样的代码,所以,要想将程序猿所开发的代码在计算机上运行,就必须找"人"(工具)来翻译成机器语言,这个"人"(工具)就是我们常常所说的编译器或者解释器。
章工运维
2023/05/19
1.9K0
shell基础
Linux shell 程序设计4——shell变量
1、shell变量没有类型,所有变量都被当作字符串来处理。 2、shell变量的命名和c语言相同。 3、shell变量赋值和c语言略有不同,shell赋值要求等号的两边不能出现空格,而在linux C 中,一般为了增强代码的可读性,等号的两边都加一个空格。如果shell变量的赋值为字符串,而且字符串中含有空格,则必须给该字符串加单引号或双引号。 4、shell变量不同于c语言,无需定义可直接赋值使用。例如: #!/bin/bash #This is an example to show how to use
宅蓝三木
2018/02/07
1.9K0
相关推荐
shell变量详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验