SHELL变量分为三类:本地变量、环境变量和位置参数

变量存在三种基本结构:变量名、操作符(个人定义)、变量值

比如:var=blue  变量名:var    操作符:=    变量值:blue

变量的设置规则:

1、变量名与变量值连接的“=”,两边不能有空格,如var = blue(=号前后各有一个空格)

2、变量名:只能包含三种符号,字母a~z、A~Z,数字0~9以及下划线(_),同时变量名第一个字符不能是数字

3、至于变量值中包含空格时,需要用双引号或者单引号括起来(这里涉及到双引号单引号的作用),以及变量值的一起其他注意事项(下面慢慢涉及)

一、变量的替换和赋值

shell三类变量中,因为位置参数是只读变量,所以变量的替换和赋值只针对本地变量和环境变量

变量是某个值得名称——变量名(如上述的var)

引用变量的值则称为变量替换,如何引用呢?通过$符号来实现引用,$变量名,如$var

赋值:将值赋给某个变量名称为赋值,如var=blue,表示将值blue赋给变量var

赋值有两种格式:

variable=value

${variable=value}

一般赋值都是使用第一种variable=value的方式,至于第二种赋值,则涉及之后的复杂点的方式

shell通过echo命令来回显变量的值

变量值中如果存在空格或者tab键,则使用单引号或者双引号,将空格以字面符号显示出来,否则就会将空格后的字符解释为系统命令,因此提示world:command not found....

之所以会如何是因为变量IFS的原因,IFS将空格设置为了分割符

另一个变量的运用方式:在变量值中引用变量

这里之所以能引用variable值完全是双引号的引用作用,如果将双引号换成单引号,则会凉凉

$引用失去效果。

二、变量赋值的扩展(   这里就涉及赋值的第二种方式${variable=value}   )

除了等号进行变量赋值之外,还有几个赋值符号,仅列出三个

variable:?value 或者 variable?value                  对未赋值的variiable,显示系统错误信息(可以作为shell语句的条件判断)

variable:=value                           对未赋值的variable,将value值赋给它

variable:-value                             对未赋值的variable,将value值赋给它,但value值不存储到variable对应的地址空间中

不论是${varibale:?value}、${varibale:=value}还是${variable:-value},只要varibale存在赋值,那么就不会显示后面的字符串

通过比较“:-”和“:=”,共同点都是variable未赋值时,执行后续的赋值操作,只是“:=”最终将值存储到变量中,而“:-”则不将值存储到变量中

unset 变量名         表示清除变量的值

readonly命令可以设置变量为只读,格式:

variable=value

readonly variable

readonly查看所有的只读变量,通过上述,可以知道,readonly命令实际上是通过declare -r 来实现变量只读属性的

三、环境变量

环境变量的特殊之处在于变量有效范围。本地变量只能作用于当前Shell,环境变量可以作用于当前登录账户所产生的子进程。

那么为什么环境变量数据可以被子进程所引用呢?这是因为内存分配的关系。理论上是这样的:

当启动一个shell,操作系统会分配一记忆块给shell使用,此内存内的变量可以让子进程取用

若在父进程利用export功能时,可以让自定义变量(本地变量)的内容写到上述的记忆块中

当加载另一个shell时,子进程shell可以将父shell的环境变量所在的记忆块导入到自己的环境变量块中

1、定义环境变量的格式:

variable=value          自定义的变量

export variable          export将variable变量声明为环境变量

通过env可以查看系统中所有的环境变量

2、几个环境变量

1>、PATH

PATH用于帮助shell找到用户所输入的命令,PATH中包含多个目录的路径,用冒号进行分隔

2>、PS1 和PS2

PS1是一级提示符,PS2表示二级提示符,提示符命令行前的一段字符,如[root@localhost ~]#

二级提示符就是上图的>,提示命令没有输入完全

提示符变量中的特殊符号(注意这些符号是PS自身定义的):

\d                以“周、月、日”格式显示日期

\H                显示完整主机名和域名

\h                仅显示主机名

\T                以12小时制显示时间,格式为:HH:MM:SS

\t                 以24小时制显示时间,格式为: HH:MM:SS

\A                以24小时制显示时间,格式:HH:MM

\@                 以12小时制显示时间,格式:am/pm

\u                当前用户名  

\v                bash shell的版本号

\w                当前工作目录的完整路径

\W                当前工作目录的相对路径

\#                当前命令的序列号(执行第几个命令)

\$                如果UID为0,打印#;否则,打印$

3>、LANG

LANG就是语系数据,有些数据文件支持特殊的编码语系,需要使用特殊的编码语系才能完整的显示出来,否则会出现乱码

4>、RANDOM

RANDOM返回随机数,RANDOM变量内容介于0~32767之间,所以echo $RANDOM 的每次结果都不尽相同

四、查询环境变量和自定义变量

不带参数情况下,可以使用set命令显示所有的环境变量和自定变量,readonly显示只读变量,export显示环境变量

END

SHELL 变量一的更多相关文章

  1. shell变量

    定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...

  2. linux中shell变量$#,$@,$0,$1,$2的含义解释

    linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...

  3. awk使用shell变量

    awk使用shell变量  (可以计算浮点数) 其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time=&qu ...

  4. shell变量详解

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

  5. 三、Shell变量类型和运算符

    一.Shell变量的应用 1.Shell变量的种类     ·用户自定义变量:由用户自己定义.修改和使用     ·预定义变量:Bash预定义的特殊变量,不能直接修改     ·位置变量:通过命令行给 ...

  6. Shell入门教程:Shell变量

    变量 是一种很“弱”的变量,默认情况下,一个变量保存一个串,Shell不关心这个串是什么含义.所以若要进行数学运算,必须使用一些命令例如 let.declare.expr.双括号等. Shell变量可 ...

  7. Shell变量的定义与赋值操作注意事项

    1 shell变量是弱类型 * 声明变量不用声明类型 * 可以存储不同类型的内容 * 使用时要明确变量的类型 * 区分大小写 2 变量声明及赋值格式 2.1 格式  变量名=变量值 # 注意等号两侧不 ...

  8. Linux shell 变量 数学 运算

    Abstract : 1)  Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 ...

  9. linux环境几个特殊的shell变量

    特殊的shell变量: $0  获取当前执行的shell脚本的文件名 $n  获取当前执行的shell脚本的第n个参数值,n=1..9 $*  获取当前shell的所有参数 “$1 $2 $3 …注意 ...

  10. 《Linux shell变量总结回顾》RHEL6(转)

    文章版权:http://www.cnblogs.com/linux-super-meng/ 环境变量路径: [root@localhost ~]# set   //查看到的是局部变量和全局变量2种 [ ...

随机推荐

  1. Python+Selenium - 定位策略

    一个元素定位可能会在多个地方用到,用loc变量接收元素的定位方式和相对路径.使用时再拆包(*loc) loc = (定位方式,'定位方式对应的元素路径')    =>元素定位方式及路径 driv ...

  2. Non-Maximum Suppression,NMS非极大值抑制

    Non-Maximum Suppression,NMS非极大值抑制概述非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索. ...

  3. AI框架精要:设计思想

    AI框架精要:设计思想 本文主要介绍飞桨paddle平台的底层设计思想,可以帮助用户理解飞桨paddle框架的运作过程,以便于在实际业务需求中,更好的完成模型代码编写与调试及飞桨paddle框架的二次 ...

  4. TensorFlow单层感知机实现

    TensorFlow单层感知机实现 简单感知机是一个单层神经网络.它使用阈值激活函数,正如 Marvin Minsky 在论文中所证明的,只能解决线性可分的问题.虽然限制了单层感知机只能应用于线性可分 ...

  5. CodeGen概述

    CodeGen概述 CodeGen是在协同开发环境中工作的软件开发人员可以用来生成源代码的工具.该代码可能是Synergy DBL代码,也可能是其他语言的源代码.CodeGen并不局限于为任何特定的开 ...

  6. 十三、给已安装的nginx动态添加模块

    给已安装的nginx动态添加模块说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢?具体:这里以安装 --with-http_ssl_module模块为例nginx的模块是需要 ...

  7. python学习笔记05-条件分支与循环1

    思考问题:100分制,90分以上为A,80-90为B,60-80为C,60以下为D,当用户输入成绩后,打印对应的字母 temp=input('请输入你的成绩:') score=int(temp) if ...

  8. 重磅!GitHub官方开源新命令行工具

    近日,GitHub 发布命令列工具 (Beta) 测试版,官方表示,GitHub CLI提供了一种更简单.更无缝的方法来使用Github.这个命令行工具叫做GitHub CLI,别名gh. 现在,你就 ...

  9. 必看!LuatOS自定义C库全新教程,一文极速上手

    今天继续讲LuatOS的开发,上一期简单说了一下如何移植LuatOS,相信很多朋友已经看过了.那么今天,我就开始讲C和Lua调用的部分教程. LuatOS相关资料及Lua语言的官方定义,详见以下链接: ...

  10. 看完互联网大佬的「LeetCode 刷题手册」, 手撕了 400 道 Leetcode 算法题

    大家好,我是 程序员小熊 ,来自 大厂 的程序猿.相信绝大部分程序猿都有一个进大厂的梦想,但相较于以前,目前大厂的面试,只要是研发相关岗位,算法题基本少不了,所以现在很多人都会去刷 Leetcode ...