SHELL 变量一
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 变量一的更多相关文章
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- linux中shell变量$#,$@,$0,$1,$2的含义解释
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...
- awk使用shell变量
awk使用shell变量 (可以计算浮点数) 其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time=&qu ...
- shell变量详解
1 shell变量基础 shell变量是一种很"弱"的变量,默认情况下,一个变量保存一个串,shell不关心这个串是什么含义.所以若要进行数学运算,必须使用一些命令例如let.de ...
- 三、Shell变量类型和运算符
一.Shell变量的应用 1.Shell变量的种类 ·用户自定义变量:由用户自己定义.修改和使用 ·预定义变量:Bash预定义的特殊变量,不能直接修改 ·位置变量:通过命令行给 ...
- Shell入门教程:Shell变量
变量 是一种很“弱”的变量,默认情况下,一个变量保存一个串,Shell不关心这个串是什么含义.所以若要进行数学运算,必须使用一些命令例如 let.declare.expr.双括号等. Shell变量可 ...
- Shell变量的定义与赋值操作注意事项
1 shell变量是弱类型 * 声明变量不用声明类型 * 可以存储不同类型的内容 * 使用时要明确变量的类型 * 区分大小写 2 变量声明及赋值格式 2.1 格式 变量名=变量值 # 注意等号两侧不 ...
- Linux shell 变量 数学 运算
Abstract : 1) Linux shell 中使用 let , [ ] ,(( )) 三种运算符操作 shell 变量进行简单的基本运算: 2)Linux shell 中使用 expr 与 ...
- linux环境几个特殊的shell变量
特殊的shell变量: $0 获取当前执行的shell脚本的文件名 $n 获取当前执行的shell脚本的第n个参数值,n=1..9 $* 获取当前shell的所有参数 “$1 $2 $3 …注意 ...
- 《Linux shell变量总结回顾》RHEL6(转)
文章版权:http://www.cnblogs.com/linux-super-meng/ 环境变量路径: [root@localhost ~]# set //查看到的是局部变量和全局变量2种 [ ...
随机推荐
- Jmeter(五十) - 从入门到精通高级篇 - jmeter 之模拟弱网进行测试(详解教程)
1.简介 在实际工作中,网络带宽一定不会是持续稳定的保持某一个值,而是有高有低.因此为了测试场景和实际能够无限的接近,所以我们需要模拟一下来达到效果.还有就是在实际的测试工作中,会因为业务需要,有时限 ...
- grasshopper DataTree 树形数据以及Graft Flatten Simplify的理解
问题的来源: 要在grasshopper里面输出 类似于二维数组的数据 但是在 grasshopper里的 C# 电池里面,无法显示 二维ArrayList里面的数据. 在 C# 电池里参考这个帖子: ...
- 现代传感器的接口:中断驱动的ADC驱动程序
现代传感器的接口:中断驱动的ADC驱动程序 Interfacing with modern sensors: Interrupt driven ADC drivers 研究了如何编写一个阻塞的模数转换 ...
- 整理AI性能指标
整理AI性能指标 Sorting out AI performance metrics 推理性能的最佳衡量标准是什么? 在人工智能加速器的世界里,对于给定的算法,芯片的性能经常以每秒万亿次的运算量(T ...
- eclipse 新建项目不可选择Java Project 解决方法
解决方法一: 鼠标点击file-new-other,弹出选项框,选中java project,点击next,接下来就是正常创建java protect的流程了,这个虽然也可以解决,但每次新建java项 ...
- 【NX二次开发】Block UI 角度尺寸
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...
- PTA4-6题目集总结与归纳
前言: 继上篇blog所写的几种日期的求法,这次是把那几种聚合起来,即日期类的聚合设计.除下这类,一种是图形继承设计的3种变化,还有一种是3次对正则表达式的应用.当然,作为一个菜鸟,还是无法写成大佬的 ...
- LTDC_DMA2D驱动实验
STM32F429芯片使用LTDC.DMA2D.及RAM存储器,构成了一个完整的液晶控制器.LTDC负责不断刷新液晶屏(将数据从显存搬运到液晶屏),DMA2D用于图像数据搬运.混合及格式转换(将数据搬 ...
- 【题解】Grape luogu1156改 dp
考试时被数据坑了 题目 原题 传送门 题目描述: 众所周知的是oyyf 沉迷葡萄,今天的oyyf为了葡萄溜到了He 大佬家的葡萄园偷葡萄,可惜的是还没偷到葡萄He 大佬就来葡萄园了,吓的oyyf 直接 ...
- 65.QT-UDP组播实现多人共享桌面(同时支持收发显示)
这里我们只是简单学习下通过udp组播如何共享桌面demo.帧率上面比较低,毕竟没有用推流,只是简单的将图片发送到组播地址,而加入组播地址的客户端去取数据显示而已. 主要是为了学习UDP知识而写的,真的 ...