Linux操作系统笔记——Shell变量
Posted 晚风(●•σ )
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中赋值的字符串中含有空格,但没有通过双引号包含,所以报错,如下:
(二)变量引导符($)
- 在变量前加符号“
$
”,即可取该变量的值。
例如通过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终端中输入命令:
环境变量有以下几种:
- HOME变量:用于
标识当前用户的主目录
,用户创建的文件都保存在这个目录以及其子目录中。
通过echo命令查看$HOME变量,如下:
[yyx@yyx12 ~]$ echo $HOME
在Linux终端中输入命令:
- PATH变量:
搜索路径
,该变量的值是以冒号“:”隔开的多个目录名称,也就是一系列的目录名称,当运行一个命令(程序)时,就会从左到右地依次在这些目录中查找命令,找到了后就直接执行;若没有找到,则不会再去其他目录中查找。
通过echo命令输出该变量,如下:
[yyx@yyx12 ~]$ echo $PATH
在Linux终端中输入命令:
这里为什么要说是搜索路径,是因为/bin和/sbin存放的是二进制可执行文件,也就是存放的命令,如下:
目录名称 | 作用 |
---|---|
/bin | 存放二进制可执行文件 ,它存放着最经常使用的命令 |
/sbin | 通常也是存放二进制可执行文件 ,它存放的是系统管理员使用的系统管理程序 |
这里未能理解的小伙伴,可以看之前的文章,其中有讲述到相关的目录知识:
Section 11 Linux操作系统简介
- TERM变量:用于
指定当前用户所用的终端类型
。
通过echo命令输出该变量,如下:
[yyx@yyx12 ~]$ echo $TERM
在Linux终端中输入命令,可看到xterm-256color,即支持启用256色的Xterm:
- IFS变量:
字段分隔符
,当输入命令时,命令当中有选项参数,该变量定义其中的间隔。
通过echo命令输出该变量,如下:
[yyx@yyx12 ~]$ echo $IFS
在Linux终端中输入命令,该变量的值通常为空:
- SHELL变量:用于
保存当前用户的初始Shell的路径名称
,保存的路径是用户登录时所启动的Shell。
通过echo命令输出该变量,如下:
[yyx@yyx12 ~]$ echo $SHELL
在Linux终端中输入命令:
- 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 "$Aer"
...
[yyx@yyx12 ~]$ echo "$Aer"
...
在Linux终端中输入命令:
以上是关于Linux操作系统笔记——Shell变量的主要内容,如果未能解决你的问题,请参考以下文章