变量含义
学生时代所学的数学方程式,如x=1,y=2,那会称之为x,y是未知数
对于计算机角度,x=1,y=2等于定义了两个变量,名字分别是x,y,且赋值了1和2
变量是暂时存储数据的地方,是一种数据标记(房间号,标记了客人所在的位置),数据存储在内容空间,通过调用正确的变量名字,即可取出对应的值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7tExr1WT-1678231830756)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191123202024993.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmVqO46x-1678231830760)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191123203516529.png)]
shell变量
- 变量定义与赋值,注意变量与值之间不得有空格
name="超哥"
变量名
变量类型,bash默认把所有变量都认为是字符串
bash变量是弱类型,无需事先声明类型,是将声明和赋值同时进行
- 变量替换/引用
[root@chaogelinux ~]# name="超哥带你学bash"
[root@chaogelinux ~]# echo ${name}
超哥带你学bash
[root@chaogelinux ~]# echo $name #可以省略花括号
超哥带你学bash
- 变量名规则
- 名称定义要做到见名知意,切按照规则来,切不得引用保留关键字(help检查保留字)
- 只能包含数字、字母、下划线
- 不能以数字开头
- 不能用标点符号
- 变量名严格区分大小写
有效的变量名:
NAME_CHAOGE
_chaoge
chaoge1
chaogE1
Chao2_ge
无效的变量名:
?chaoge
chao*ge
chao+ge
-
变量的作用域
- 本地变量,只针对当前的shell进程
pstree检查进程树
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTrZ42Md-1678231830761)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191123210752571.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEOUmWm1-1678231830762)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191123210942192.png)]
- 环境变量,也称为全局变量,针对当前shell以及其任意子进程,环境变量也分
自定义
、内置
两种环境变量 - 局部变量,针对在
shell函数
或是shell脚本
中定义
-
位置参数变量:用于
shell脚本
中传递的参数 -
特殊变量:shell内置的特殊功效变量
- $?
- 0:成功
- 1-255:错误码
- $?
-
自定义变量
-
变量赋值:
varName=value
-
变量引用:
${varName}
、$varName
- 双引号,变量名会替换为变量值
[root@chaogelinux ~]# n1=1 [root@chaogelinux ~]# n2=2 [root@chaogelinux ~]# [root@chaogelinux ~]# n3="$n1" [root@chaogelinux ~]# echo $n3 1 [root@chaogelinux ~]# n4='$n2' [root@chaogelinux ~]# echo $n4 $n2
- 单引号,识别为普通字符串
-
不同的执行方式,不同的shell环境
[root@chaogelinux data]# echo user1='超哥' > testsource.sh
[root@chaogelinux data]# echo $user1
[root@chaogelinux data]# sh testsource.sh
[root@chaogelinux data]# echo $user1
[root@chaogelinux data]# source testsource.sh
[root@chaogelinux data]# echo $user1
超哥
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g2BHmsJd-1678231830763)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191128143311747.png)]
解答:
1.每次调用bash都会开启一个子shell,因此不保留当前的shell变量,通过pstree
命令检查进程树
2.调用source是在当前shell环境加载脚本,因此保留变量
shell变量面试题
问,如下输入什么内容
[root@chaogelinux data]# cat test.sh
user1=`whoami`
[root@chaogelinux data]# sh test.sh
[root@chaogelinux data]# echo $user1
A.当前用户
B.超哥
C.空
环境变量设置
环境变量一般指的是用export内置命令导出的变量,用于定义shell的运行环境、保证shell命令的正确执行。
shell通过环境变量确定登录的用户名、PATH路径、文件系统等各种应用。
环境变量可以在命令行中临时创建,但是用户退出shell终端,变量即丢失,如要永久生效,需要修改环境变量配置文件
- 用户个人配置文件
~/.bash_profile
、~/.bashrc 远程登录用户特有文件
- 全局配置文件
/etc/profile
、/etc/bashrc
,且系统建议最好创建在/etc/profile.d/
,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户
检查系统环境变量的命令
- set,输出所有变量,包括全局变量、局部变量
- declare,输出所有的变量,如同set
- export,显示和设置环境变量值(显示全局变量)
- env,只显示全局变量
撤销环境变量
- unset 变量名,删除变量或函数。
设置只读变量
- readonly ,只有shell结束,只读变量失效
直接readonly 显示当前系统只读变量
[root@chaogelinux ~]# readonly name="超哥"
[root@chaogelinux ~]# name="chaochao"
-bash: name: 只读变量
系统保留环境变量关键字
bash内嵌了诸多环境变量,用于定义bash的工作环境
[root@chaogelinux ~]# export |awk -F '[ :=]' '{print $3}'
bash多命令执行
[root@chaogelinux home]# ls /data/;cd /tmp/;cd /home;cd /data
环境变量初始化与加载顺序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1BiYg6f-1678231830764)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20200319102558364.png)]