Linux操作系统笔记——Shell变量

简介: Linux操作系统笔记——Shell变量

一、Shell变量的基本概念


Shell中的变量分为三种,分别是环境变量(标准变量)、系统变量以及用户自定义变量(局部变量),环境变量的值可被用户修改,而系统变量是由系统预定义的,用户只能引用但不能修改,另外用户可自定义变量,即用户自定义变量,可以对变量进行创建、赋值以及引用等。


(一)创建Shell变量


用户可自定义变量,直接在变量名称后加上赋值符“=”即可,其中赋给变量的值可以是数值、变量、字符串或命令等等(若字符串中包含空格,则需用“”标注)。

例如自定义一个变量名称为“value”,其值为1000,以及定义一个name变量,内容为字符串,如下:

[yyx@yyx12 ~]$ value=1000
[yyx@yyx12 ~]$ name="this is my linux,hello world"


如下,创建几个变量A、B、C、D,通过echo命令输出其值【echo命令用于输出字符串或变量】:

[yyx@yyx12 ~]$ A=xiaoming
[yyx@yyx12 ~]$ B="xiaoming"
[yyx@yyx12 ~]$ C=hello world
...
[yyx@yyx12 ~]$ D="hello world"
[yyx@yyx12 ~]$ echo $A $B $C $D
...


在Linux终端中输入命令,可看到变量A和变量B的输出结果是一样的,变量C中赋值的字符串中含有空格,但没有通过双引号包含,所以报错,如下:

1667218096486.jpg


(二)变量引导符($)


在变量前加符号“$”,即可取该变量的值。

例如通过echo命令输出刚刚创建的value变量的值,如下:

[yyx@yyx12 ~]$ echo $value


在Linux终端中输入命令:

1667218141762.jpg

例如创建两个变量,其中变量B中包含变量A的值,如下:

[yyx@yyx12 ~]$ A=xiaoming
[yyx@yyx12 ~]$ B="He is $A"
[yyx@yyx12 ~]$ echo $A
...
[yyx@yyx12 ~]$ echo $B
...


在Linux终端中输入命令:

1667218161310.jpg


(三)只读变量(readonly 命令)


通过readonly 命令可以将一个变量变为只读变量,readonly后直接跟变量的名称,它的值不能被修改。

如下创建一个变量A并赋予其值,将其设为只读变量,然后再修改该变量:

[yyx@yyx12 ~]$ A="This is my school"
[yyx@yyx12 ~]$ readonly A
[yyx@yyx12 ~]$ A="This is his school"


在Linux终端中输入命令,发现会报错:

1667218189802.jpg


(四)查看变量(set 命令)


可以通过set 命令查看当前用户的环境变量,它也会显示用户自定义的变量。

如下我们创建一个变量如何通过set命令查看该变量:

[yyx@yyx12 ~]$ A=1111111
[yyx@yyx12 ~]$ set


在Linux终端中输入命令,可看到刚刚创建的变量:

1667218212501.jpg


(五)清除变量(unset 命令)


清除变量可以通过unset 命令,该命令后跟变量的名称(不用加上变量引导符$),当变量清除后其值为空。

例如创建一个变量后通过echo命令输出该变量,然后在通过unset命令清除后再次输出该变量:

[yyx@yyx12 ~]$ words="Linux is an operating system" 
[yyx@yyx12 ~]$ echo $words
...
[yyx@yyx12 ~]$ unset words
[yyx@yyx12 ~]$ echo $words
...


在Linux终端中输入命令,可以看到执行unset命令后的words变量为空:

1667218235888.jpg

关于自定义变量还要注意一点,用户创建的自定义变量,在退出终端后就会消失,如下:

1667218248779.jpg

关闭终端后,通过echo命令输出该变量的值,可发现该变量为空:

1667218258914.jpg


二、Shell变量的分类


(一)环境变量


环境变量都被存放在/etc/profile文件中,如下通过cat命令查看/etc目录下的profile文件:

[yyx@yyx12 ~]$ cat /etc/profile


在Linux终端中输入命令:

1667218293058.jpg

环境变量有以下几种:


HOME变量:用于标识当前用户的主目录,用户创建的文件都保存在这个目录以及其子目录中。

通过echo命令查看$HOME变量,如下:

[yyx@yyx12 ~]$ echo $HOME


在Linux终端中输入命令:

1667218316968.jpg


PATH变量:搜索路径,该变量的值是以冒号“:”隔开的多个目录名称,也就是一系列的目录名称,当运行一个命令(程序)时,就会从左到右地依次在这些目录中查找命令,找到了后就直接执行;若没有找到,则不会再去其他目录中查找。

通过echo命令输出该变量,如下:

[yyx@yyx12 ~]$ echo $PATH


在Linux终端中输入命令:

1667218337610.jpg

这里为什么要说是搜索路径,是因为/bin和/sbin存放的是二进制可执行文件,也就是存放的命令,如下:

目录名称 作用
/bin 存放二进制可执行文件 ,它存放着最经常使用的命令
/sbin 通常也是存放二进制可执行文件 ,它存放的是系统管理员使用的系统管理程序



这里未能理解的小伙伴,可以看之前的文章,其中有讲述到相关的目录知识:

Section 11 Linux操作系统简介


TERM变量:用于指定当前用户所用的终端类型。

通过echo命令输出该变量,如下:

[yyx@yyx12 ~]$ echo $TERM


在Linux终端中输入命令,可看到xterm-256color,即支持启用256色的Xterm:

1667218391725.jpg


IFS变量:字段分隔符,当输入命令时,命令当中有选项参数,该变量定义其中的间隔。

通过echo命令输出该变量,如下:

[yyx@yyx12 ~]$ echo $IFS


在Linux终端中输入命令,该变量的值通常为空:

1667218410412.jpg

SHELL变量:用于保存当前用户的初始Shell的路径名称,保存的路径是用户登录时所启动的Shell。

通过echo命令输出该变量,如下:

[yyx@yyx12 ~]$ echo $SHELL


在Linux终端中输入命令:

1667218435036.jpg


PS1变量该变量用于保存系统中的基本提示符,默认值为“$”。

通过echo命令输出该变量,如下:

[yyx@yyx12 ~]$ echo $PS1


在Linux终端中输入命令:

1667218453895.jpg


(二)系统变量


Shell中的系统变量是系统定义并赋予初值的,用户只能引用但不能修改其值,常用的Shell系统变量如下表:

系统变量名称 作用
$0 当前Shell脚本的名称,对应于命令行上输入的脚本名
$1,$2,……,$9 分别表示命令行上第1-9个命令行参数
$# 命令行上的参数个数,不包括$0
$* 命令行上的所有参数
$@ 同上
$$ 当前进程的进程号
$? 上一条命令的退出状态
$! 最后一个后台进程的进程号


(三)用户自定义变量


如何自定义变量在刚刚Shell变量的基本概念中已经讲过,这里不再累述。


在Unix/Linux操作系统中,我们规定允许使用未经定义和赋值的变量,当通过$引用这些变量时,它们的值为空。

例如直接通过echo命令输出一个未创建的变量filename的值(并未创建filename这个变量),如下:

[yyx@yyx12 ~]$ echo $filename


在Linux终端中输入命令,可看到空了一行,显示它是空的:

1667218496549.jpg


三、Shell的引用符


(一)双引号和单引号


1667218512732.jpg

前面已经讲过,在一个双引号中带有变量引导符$,则表示它会取这个变量的值,即双引号中可以有变量,同时也可以出现转义字符。


而单引号不一样,在单引号中其他字符的原有特殊含义都被屏蔽了,它们显示的是这些符号的基本含义,如下:

[yyx@yyx12 ~]$ number=12345
[yyx@yyx12 ~]$ A="He is $number"
[yyx@yyx12 ~]$ B='He is $number'
[yyx@yyx12 ~]$ echo $A
...
[yyx@yyx12 ~]$ echo $B
...


在Linux终端中输入命令,可看到B变量值中的单引号内的$number无效,它通过echo命令显示的是原本的内容,其中的字符失去了其特殊含义:

1667218538321.jpg


(二)反引号


反引号用于将反引号其中的字符串当作命令来执行,即该命令执行的结果被直接保存在变量中。

如下,pwd命令被包含在反引号内:

[yyx@yyx12 ~]$ A=`pwd`
[yyx@yyx12 ~]$ echo "The current working directory name is:$A"


在Linux终端中输入命令:

1667218560925.jpg


(三)花括号


花括号可以使变量与其后跟的其他字符隔开,如下由于要将变量A与后面字符串拼接起来,如果直接$Aer会直接输出空值(由于变量Aer未定义,取的是变量Aer的值,而不是变量A的值),所以通过给变量加上花括号,从而使变量与后面的字符串分隔开:

[yyx@yyx12 ~]$ A="he is a teach"
[yyx@yyx12 ~]$ echo "${A}er"
...
[yyx@yyx12 ~]$ echo "$Aer"
...


在Linux终端中输入命令:

1667218049392.jpg

相关文章
|
2月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
85 0
Vanilla OS:下一代安全 Linux 发行版
|
11天前
|
弹性计算 自然语言处理 Ubuntu
OS Copilot-操作系统智能助手-Linux新手小白的福音
OS Copilot是由阿里云推出的操作系统智能助手,专为Linux新手设计,支持自然语言问答、辅助命令执行等功能,极大提升了Linux系统的使用效率。用户只需通过简单的命令或自然语言描述问题,OS Copilot即可快速提供解决方案并执行相应操作。例如,查询磁盘使用量等常见任务变得轻松快捷。此外,它还支持从文件读取复杂任务定义,进一步简化了操作流程。虽然在某些模式下可能存在小问题,但总体上大大节省了学习和操作时间,提高了工作效率。
79 2
OS Copilot-操作系统智能助手-Linux新手小白的福音
|
3天前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
42 7
|
4天前
|
存储 运维 安全
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
26 5
|
5天前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
2月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
56 0
Linux 如何更改默认 Shell
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
99 4
|
3月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
94 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
人工智能 安全 Linux
|
2月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。