目录

  • 一、Shell变量的基本概念
    • (一)创建Shell变量
    • (二)变量引导符($)
    • (三)只读变量(readonly 命令)
    • (四)查看变量(set 命令)
    • (五)清除变量(unset 命令)
  • 二、Shell变量的分类
    • (一)环境变量
    • (二)系统变量
    • (三)用户自定义变量
  • 三、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中赋值的字符串中含有空格,但没有通过双引号包含,所以报错,如下:

(二)变量引导符($)

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

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

[yyx@yyx12 ~]$ echo $value

在Linux终端中输入命令:

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

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

在Linux终端中输入命令:

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

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

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

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

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

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

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

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

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

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

(五)清除变量(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变量为空:

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

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

二、Shell变量的分类

(一)环境变量

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

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

在Linux终端中输入命令:

环境变量有以下几种:

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

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

[yyx@yyx12 ~]$ echo $HOME

在Linux终端中输入命令:

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

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

[yyx@yyx12 ~]$ echo $PATH

在Linux终端中输入命令:

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

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

这里未能理解的小伙伴,可以看之前的文章,其中有讲述到相关的目录知识:
Section 11 Linux操作系统简介

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

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

[yyx@yyx12 ~]$ echo $TERM

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

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

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

[yyx@yyx12 ~]$ echo $IFS

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

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

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

[yyx@yyx12 ~]$ echo $SHELL

在Linux终端中输入命令:

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

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

[yyx@yyx12 ~]$ echo $PS1

在Linux终端中输入命令:

(二)系统变量

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

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

(三)用户自定义变量

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

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

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

[yyx@yyx12 ~]$ echo $filename

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

三、Shell的引用符

(一)双引号和单引号


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

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

[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命令显示的是原本的内容,其中的字符失去了其特殊含义:

(二)反引号

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

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

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

在Linux终端中输入命令:

(三)花括号

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

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

在Linux终端中输入命令:

Linux操作系统笔记——Shell变量相关推荐

  1. Linux操作系统笔记——Shell程序设计

    目录 一.Shell脚本的概念 二.一个Shell脚本的基本步骤 三.赋予Shell脚本执行权限 (一)Shell调用脚本 (二)chmod命令赋予脚本执行权限 四.Shell功能性语句 (一)rea ...

  2. Linux基础之shell变量

    Linux基础之shell变量 一.shell变量及其他相关介绍 二.shell变量类型 三.shell变量用法 四.定义命令别名 五.系统变量文件定义说明 一.shell变量及其他相关介绍 1.编译 ...

  3. linux中对shell变量内容的修改和替换

    鸟哥私房菜中,对这一内容的描述,简直让人看不懂,好不容易找来文章可以帮助理解下. linux中对shell变量内容的修改和替换 1.变量内容修改 file=/dir1/dir2/dir3/my.fil ...

  4. Linux操作系统笔记(超详细)

    [历史文章] Ubuntu在进行更新系统时出现Hash校验和不符的问题 Linux常用的命令总结(一)--ls命令与cd命令 Linux命令(二)mkdir命令与rmdir命令 Linux命令(三)t ...

  5. Linux操作系统与Shell编程

    Linux是自由.开源的操作系统,安装在计算机的硬件之上,是用来操作计算机硬件和软件资源的系统软件,一般应用于专业的web服务器上,具有以下特性 Linux注重系统的安全性,对文件访问权限有严格设定, ...

  6. 马哥学习笔记——shell变量类型

    shell变量基础 shell 变量是一种很"弱"的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义.所以若要进行数学运算,必须使用一些命令例如let. de ...

  7. linux 操作系统笔记基础命令

    文章目录 linux 基础命令 cd 命令详解 ls 命令详解 pwd 命令详解 hostname命令详解 clear命令详解 who.whoami.w 命令 which 命令 cal 命令详解 ld ...

  8. linux操作系统之条件变量

    (1)条件变量 条件变量本身不是锁,但它可以造成线程阻塞,通常与互斥锁配合使用. (2)条件锁相关函数 pthread_cond_t类型,用于定义条件变量 1)初始化一个条件变量:pthread_co ...

  9. linux中的echo%3e文件,Linux学习笔记-shell脚本中${}的使用方法

    ${} 除了做${var}变量替换,还有什么功能呢? # 举例说明 [[email protected] ~]$ file=/dir1/dir2/dir3/my.file.txt # 变量替换 [[e ...

最新文章

  1. 黑客与网管的30天较量
  2. ​redis实现消息队列
  3. 【重点EI会议推荐】机器学习主题方向论文征稿:2021计算机、物联网与控制工程国际学术会议(CITCE 2021)...
  4. MySQL管理员指南
  5. gevent-tutorial翻译和解读
  6. qtreewidgetitem 文字内存太长换行_table文字溢出显示省略号问题
  7. EMS批量为用户分配邮箱
  8. android源码解析------Music 音乐播放器
  9. 1D和2D条码生成、检测、识别控件Barcode Xpress
  10. c语言中的memset函数与bzero函数
  11. vc linux 中文版下载64位,VSCode 64位下载
  12. 同步Chrome浏览器插件
  13. 微信打不开MP4文件 (记录编码问题)
  14. 德国人的数学题375=1
  15. SQL注入-入门需了解项目
  16. 第十二届蓝桥杯省赛JAVA B组杨辉三角形个人题解
  17. 微信小程序聊天功能PHP,微信小程序实现聊天室
  18. maven项目test执行main找不到资源文件
  19. java赋值运算的类型转换出新的问题_Java中byte、short、char、int、long运算时自动类型转化问题...
  20. tar命令打包和压缩与解压

热门文章

  1. 微服务API设计的实践与思考总结
  2. 为啥国人偏爱 Mybatis,而老外喜欢 Hibernate/JPA 呢?
  3. 再看Kafka Lag
  4. 聊一聊ThreadLocal
  5. 【WebRTC专场】WebRTC的下个10年,又会有怎样的惊喜?
  6. Spark之Spark概述
  7. 报名|腾讯技术开放日·5G技术专场
  8. 大牛书单 | 大数据存储方向好书分享
  9. 分支管理---分支管理策略
  10. NASA告诉你四翼飞行器的飞行原理