【学习笔记】Shell-1 变量:命名规范、变量赋值/取值/取消、局部变量/全局变量、预设环境变量
从个人的测试岗位面试经历中看,百分之八九十的面试官都会问“熟悉哪些Linux命令?会写Shell脚本吗?”
常用的Linux命令一般都能答上几个,但如果面试官问的太具体参数的用法,回答的时候会有点心里没底;Shell脚本就更不用说了,基本没动手写过。
为了能更好的适应工作,后续会学习Linux&Shell相关的知识,不定期更新到博客园,以便记录、回顾。
1.Shell变量
从变量的实质上来说,变量名是指向一片用于存储数据的内存空间。
Shell变量是一种弱类型的变量,即声明变量时不需要指定其变量类型,也不需求遵循“先声明再使用”的规定,想用即可用。
2.命名规范、变量赋值、变量取值、取消变量
2.1 变量名命名规范:
2.2.1 由英文字母、数字、下划线组成,不能以数字开头
2.2.2 区分大小写
2.2.3 不能使用bash的关键字--疑问:怎么查看bash的所有关键字?
2.2 变量赋值:
2.1.1 var_name1=studing #变量名=变量值,=两边无空格
2.1.2 var_name2='shell studing' #变量值中有空格时必须使用引号括起,单、双引号都可以
2.1.3 var_name3="$var_name1" 或 var_name3=$var_name1 #如果变量值引用的是其他变量,则不能使用单引号括起
[root@testserver ~]# var_name1=studing
[root@testserver ~]# var_name2='shell studing'
#var_name3引用var_name1的值
[root@testserver ~]# var_name3=$var_name1
[root@testserver ~]# echo $var_name3
studing
[root@testserver ~]# var_name3='$var_name2'
[root@testserver ~]# echo $var_name3
$var_name2
[root@testserver ~]# var_name3="$var_name2"
[root@testserver ~]# echo $var_name3
shell studing
[root@testserver ~]#
2.3 变量取值:变量名前加$,如$var_name 或 ${var_name},两种方式都可以,推荐使用${var_name}。
2.4 取消变量:将变量从内存中释放,语法:unset 变量名/函数名
[root@testserver ~]# echo $var_name3
shell studing
[root@testserver ~]# unset var_name3
[root@testserver ~]# echo $var_name3 [root@testserver ~]#
3.局部变量、环境变量
3.1 局部变量
其作用域只在声明它的Shell中,对其他Shell无效。每个Shell有自己的变量空间,彼此互不影响。
例如:打开两个Shell窗口,如下图:

3.2 环境变量:即全局变量。
使用export命令将当前Shell的变量导出为环境变量,可用于子Shell继承、使用。子Shell、父Shell切换方法:在当前Shell中输入bash并回车,即进入了子Shell;在子Shell中输入exit即退出子Shell返回到父Shell。
export命令语法:export VAR=value #VAR变量名,value值,等号两边无空格
从如下示例中,可以看出:环境变量可从父Shell传给子Shell,但子Shell的环境变量不能传给父Shell。
![]() |
步骤: 1.登录Shell,即为父Shell,输入bash进入子Shell 2.=两边有空格,执行命令报错 3.在子Shell中定义变量VAR,并导出为环境变量 4.输入bash进入子Shell的子Shell,可称为孙Shell 5.输出子Shell中定义的变量VAR 6.输入exit退出孙Shell 7.输入exit退出子Shell 8.在父Shell中输出子Shell中定义的变量VAR,为空 |
4.常见的bash预设环境变量
变量BASH:Bash Shell的全路径
[root@testserver ~]# echo $BASH /bin/bash
变量BASH_VERSION:Bash Shell的版本
[root@testserver ~]# echo $BASH_VERSION
4.1.()-release
变量CDPATH:用于快速进入某个目录。
示例:如/usr/local/shell_studying/test_shell目录,每次进入test_shell目录需输入很长的路径。定义变量CDPATH='/usr/local/shell_studying/',执行cd test_shell时在当前目录查找是否有该目录,没有则进入CDPATH定义的目录中的test_shell目录,如下:
[root@testserver ~]# CDPATH='/usr/local/shell_studying/'
[root@testserver ~]# cd test_shell
/usr/local/shell_studying/test_shell
[root@testserver test_shell]#
变量EUID:记录当前用户的UID。root用户的UID为0
[root@testserver ~]# echo $EUID
变量FUNCNAME:在用户函数体内部,记录当前函数体的函数名。
示例:创建funcname.sh文件并执行。
[root@testserver shell_studing]# cat funcname.sh
#!/bin/bash
funcname(){
echo $FUNCNAME
}
funcname
[root@testserver shell_studing]# chmod +x funcname.sh
[root@testserver shell_studing]# ./funcname.sh
funcname
[root@testserver shell_studing]#
变量HISTCMD:记录下一个命令在history命令中的编号。
示例:执行history命令后,最近1条命令的编号是1009,执行echo $HISTCMD命令的编号为1010,所以下一条命令的编号为1011。
[root@testserver shell_studing]# history
....
-- :: root ./funcname.sh
-- :: root history
[root@testserver shell_studing]# echo $HISTCMD
变量HISTFILE:记录history命令记录文件的位置。
[root@testserver ~]# echo $HISTFILE
/root/.bash_history
变量HISTFILESIZE:设置HISTFILE文件记录命令的行数。限制历史命令记录的行数。
[root@testserver ~]# echo $HISTFILESIZE
变量HISTSIZE:命令缓冲区的大小。执行的命令,先记录在命令缓冲区,在缓冲区满或退出Shell时才将命令写入$HISTFILE
[root@testserver ~]# echo $HISTSIZE
变量HOSTNAME:展示主机名。
[root@testserver shell_studing]# echo $HOSTNAME
testserver
变量HOSTTYPE:展示主机的架构。如i386、i686、x86_64等。
[root@testserver shell_studing]# echo $HOSTTYPE
x86_64
变量MACHTYPE:主机类型的GNU标识。一般为“主机架构-公司-系统-gnu”
[root@testserver shell_studing]# echo $MACHTYPE
x86_64-redhat-linux-gnu
变量LANG:设置当前系统的语言环境。
[root@testserver shell_studing]# echo $LANG
en_US.UTF-
[root@testserver shell_studing]# export LANG=zh_CN.UTF-
变量PWD:记录当前目录。
[root@testserver shell_studing]# echo $PWD
/usr/local/testuser/shell_studing
变量OLDPWD:记录之前的目录。
示例:当前目录/usr/local/testuser/shell_studing,cd /root 切换路径后,/root为当前目录,则/usr/local/testuser/shell_studing为之前的目录,即$OLDPWD
[root@testserver shell_studing]# echo $PWD
/usr/local/testuser/shell_studing
[root@testserver shell_studing]# cd /root
[root@testserver ~]# echo $OLDPWD
/usr/local/testuser/shell_studing
[root@testserver ~]#
变量PATH:代表命令的搜索路径。
[root@testserver ~]# echo $PATH
/usr/local/module/maven-3.1./bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/maven/apache-maven-3.3./bin:/root/bin
#设置PATH变量,新增路径/usr/local/testuser/至PATH
[root@testserver ~]# export PATH=/usr/local/testuser/:$PATH
[root@testserver ~]# echo $PATH
/usr/local/testuser/:/usr/local/module/maven-3.1./bin:/usr/local/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/maven/apache-maven-3.3./bin:/root/bin
[root@testserver ~]#
变量PS1:命令提示符。\u是用户名,\h是主机名,\W是当前工作目录,\$是UID的替换字符:如UID为0,则替换成#(root用户),否则替换成$。
[root@testserver ~]# echo $PS1
[\u@\h \W]\$
其他变量:通过执行 man bash 查看man文件,在Shell Variable中查看(下图截取部分命令)。

【学习参考文档】
- 书籍:《Linux系统命令及Shell脚本实践指南》 王军 著;
- Shell教程|菜鸟教程:https://www.runoob.com/linux/linux-shell.html
【写在末尾】文章如有错误之处,欢迎评论指正,非常感谢。
有兴趣可关注同名微信公众号“粒粒的测试笔记”,号内会分享各种测试相关知识,感谢关注。

【学习笔记】Shell-1 变量:命名规范、变量赋值/取值/取消、局部变量/全局变量、预设环境变量的更多相关文章
- (转)IOS学习笔记-2015-03-29 int、long、long long取值范围
unsigned - - unsigned - - unsigned __int64的最大值: __int64的最小值:- unsigned __int64的最大值:
- javascript 变量 命名规范 变量的作用域
原文:javascript 变量 命名规范 变量的作用域 大家好,我是小强老师,今天讲解的是变量 变量 小时候我们学过 这个 应用题 : X+1=2; 问 X 等于几? 答案是 1 对了,很聪 ...
- [转载]python 变量命名规范
原文地址:python 变量命名规范作者:loveflying python源码和其他一些书籍,命名各种个性,没有一个比较统一的命名规范.于是自己总结了一些,可供参考. 模块名: 小写字母,单词之间用 ...
- 变量命名规范及str类型
变量命名规范: 1.单词之间用_分开 add_num() 2.全局变量,大写 PI,NUMBER() 3.实例变量,以_开头 _example() 4.私有实例变量 __private() 5.普通函 ...
- Shell变量的作用域:Shell全局变量、环境变量和局部变量
Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围). 在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他 ...
- MongoDB学习笔记:MongoDB 数据库的命名、设计规范
MongoDB学习笔记:MongoDB 数据库的命名.设计规范 第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...
- SQL反模式学习笔记4 建立主键规范【需要ID】
目标:建立主键规范 反模式:每个数据库中的表都需要一个伪主键Id 在表中,需要引入一个对于表的域模型无意义的新列来存储一个伪值,这一列被用作这张表的主键, 从而通过它来确定表中的一条记录,即便其他的列 ...
- centos shell基础 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 nohup & 后台运行 cut,sort,wc ,uniq ,tee ,tr ,split, paste cat> 2.txt <<EOF 通配符 glob模式 发邮件命令mail 2015-4-8 第十二节课
centos shell基础知识 alias 变量单引号 双引号 history 错误重定向 2>&1 jobs 环境变量 .bash_history source配置文件 ...
- Postman 设置全局变量和环境变量设置(之 图形界面设置变量)
在Postman中有两种方法添加变量:1.图形界面操作添加 2.执行代码添加 1.图形界面操作添加,点击右上角齿轮按钮手动添加所需测试环境: 2.点击右上角的小眼睛可以编辑.添加“全局变量”和 ...
随机推荐
- 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...
- 疲劳驾驶打瞌睡?python保障您的驾驶安全
道路千万条,安全第一条!疲劳驾驶可谓交通事故几大罪魁祸首之一,根据美国一项研究显示,司机睡眠不足4小时,交通事故肇事几率等同于醉驾. 为了减少疲劳驾驶现象,驾驶员疲劳检测应运而生.这是一项安全技术,可 ...
- CTR学习笔记&代码实现3-深度ctr模型 FNN->PNN->DeepFM
这一节我们总结FM三兄弟FNN/PNN/DeepFM,由远及近,从最初把FM得到的隐向量和权重作为神经网络输入的FNN,到把向量内/外积从预训练直接迁移到神经网络中的PNN,再到参考wide& ...
- 谁说 Vim 不好用?送你一个五彩斑斓的编辑器!
相信大家在使用各种各样强大的 IDE 写代码时都会注意到,代码中各种类型的关键字会用独特的颜色标记出来,然后形成一套语法高亮规则.这样不仅美观,而且方便代码的阅读. 而在上古神器 Vim 中,我们通常 ...
- Python巩固 - 第N天
一.函数解释: def fact(n, m = 1): s = 1 for j in range(1, n+1): s = s*j return n, m, s//m print(fact(10, 5 ...
- async,await执行流看不懂?看完这篇以后再也不会了
昨天有朋友在公众号发消息说看不懂await,async执行流,其实看不懂太正常了,因为你没经过社会的毒打,没吃过牢饭就不知道自由有多重要,没生过病就不知道健康有多重要,没用过ContinueWith就 ...
- Spring Data REST不完全指南(三)
上一篇我们介绍了使用Spring Data REST时的一些高级特性,以及使用代码演示了如何使用这些高级的特性.本文将继续讲解前面我们列出来的七个高级特性中的后四个.至此,这些特性能满足我们大部分的接 ...
- CTFHub web技能树 RCE
一个简单的ping,还没有过滤,源码也给出来了 ls一下 127.0.0.1 & ls 有一个可疑的php文件,,,但是直接访问和 cat 都出不来... 试了几下反弹shell,没成功... ...
- [javascript]JS获取当前时间戳的方法
JavaScript 获取当前时间戳: 第一种方法:(这种方法只精确到秒) var timestamp = Date.parse(new Date()); 结果:1280977330000 第二种方法 ...
- 2019-2020-1 20199310《Linux内核原理与分析》第五周作业
1.问题描述 在前面的文章中,已经了解了Linux内核源代码的目录结构,并在Oracle VM VirtualBox的Linux环境中构造一个简单的操作系统MenuOS,本文将学习系统调用的相关理论知 ...
