讲环境变量的另外几个好的视频:
https://www.bilibili.com/video/BV1pZ4y1N7pr?p=2
该视频的笔记连接:https://www.freecplus.net/ebfb46a0f8014f59a16c78ec8de73468.html
零.
- 定义的变量方式只有两种语法:
a=111
和
export a=11111
如果是写在配置文件里面的变量,注意:写在配置文件里面的变量都是用export定义的,如果不带export,那么只能在配置文件里面使用,外面用不了
- a=111 这种方式定义的变量,当前进程中有效,其他进程及当前进程的子进程无效
也就是说,切换了用户、当前子shell(比如shell脚本)、切换窗口(一个窗口就是一个shell进程)等都看不到这个变量
3.export a=11111 这种方式定义的变量,同一个shell窗口下的同一个用户才可以看到,别的用户看不到的(你登录别的用户相当于退出当前用户进程了,进入到另外的进程了),子shell(也就是当前窗口运行的shell脚本,这个是子进程) 也可以看到
注1:重新打开一个shell窗口,相当于又用root用户登录了一遍Linux服务器
另外的窗口,不管什么用户,都看不到
注2:之前的测试有问题, su - 这个命令才是登录其他用户并且使用了该用户的环境变量
一.
用户自定义变量(本地变量):当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效
注1:切换用户在回来,这个变量就没了
注2:export定义的变量,关闭了窗口 或者 退出当前用户 才会消失
一般自己定义的变量都是本地变量
定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115
引用变量: 变 量 名 或 {变量名}
查看变量:echo $变量名 set(所有变量:包括自定义变量和环境变量)
取消变量:unset 变量名
作用范围:仅在当前Shell中有效
注1:什么叫做当前Shell? 答:一个窗口就是一个shell,不同的窗口是不同的shell,可以理解为一个shell进程
ps -aux|grep bash : 每新增一个窗口,就会有一个bash进程出现
bin/bash这个进程默认就是有两个的
比如:
在当前窗口创建了变量a ,任何一个shell文件是调用不到变量a的,因为shell文件用的是当前窗口的子进程
二.局部环境变量
局部环境变量 :当前进程有效,并且能够被子进程调用(在所有子shell里面都可以调用)
局部环境变量是针对某个用户的某个窗口的:
1.同一个用户不同窗口:
①这个是有共同的环境变量的,这种是在配置文件里面,可以用env查看,你会发现不同窗口 或者 不同的用户 或者 不同窗口的不同用户 ,他们有些环境变量是一样的
②同一个窗口下,用export定义的局部环境变量,别的用户是看不到的
一个用户在一个窗口下用export创建的局部环境变量,在另外的窗口,用同一个用户登录,是看不到的
③export创建的变量,关闭掉窗口就没有了
2.不同用户之间的环境变量不可以互相调用,这个排除掉全局环境变量和一些共同都有的环境变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin : 系统查找命令的路径
env查看当前用户可以看到(可以看到就可以调用)的环境变量,全局环境变量 和 本地变量 是不打印出来的(这个可以用set看)
set命令查询当前用户的所有变量(临时变量与环境变量)
定义局部环境变量的方法:
export 变量名=变量值 ;
或者 declare -x 变量名=变量值
还可以先定义一个本地变量:a=111
export a #把本地变量变成了环境变量
注意:这种定义的环境变量也是临时的,关闭掉窗口就没有了,要永久的,就必须写入到配置文件里面去
比如:
创建一个变量a=110 , 执行export a ,把a设置成当前的环境变量,
那么,在当前窗口运行的shell文件都能够调用到这个a变量
每个用户家目录下都有的配置文件,读取后都是用户的环境变量:
文件名 说明 备注
~/.bashrc 当前用户的bash信息,用户登录时读取 定义别名、umask、函数等
~/.bash_profile 当前用户的环境变量信息,用户登录时读取
~/.bash_logout 当前用户退出当前shell时最后读取 定义用户退出时执行的程序等
~/.bash_history 当前用户的历史命令 history -w保存历史记录 history -c清空历史记录
三.全局环境变量
全局环境变量 : 所有的用户和程序都能调用,且继承,新建的用户也默认能调用.
文件名 说明 备注
~/.bashrc 当前用户的bash信息,用户登录时读取 局部。定义别名、umask、函数等
~/.bash_profile 当前用户的环境变量信息,用户登录时读取 局部。
~/.bash_logout 当前用户退出当前shell时最后读取 局部。定义用户退出时执行的程序等
~/.bash_history 当前用户的历史命令 局部。history -w保存历史记录 history -c清空历史记录
/etc/bashrc 全局的bash信息 全局。所有用户都生效
/etc/profile 全局环境变量信息 全局。系统和所有用户都生效
说明:以上文件修改后,都需要重新source让其生效或者退出重新登录。
注意1:/etc/bashrc 和 /etc/profile 这两个文件不建议乱动
用户登录系统读取相关文件的顺序
/etc/profile
$HOME/.bash_profile
$HOME/.bashrc
/etc/bashrc
$HOME/.bash_logout
说明:本地变量、局部环境变量、全局环境变量是根据变量的作用域来区分的。
四.系统变量
系统变量(内置bash中变量) : shell本身已经固定好了它的名字和作用.
常用的:
$? 上一条命令执行后返回的状态码
内置变量 含义
$? 上一条命令执行后返回的状态码;状态码值为0表示执行正常,非0表示执行异常或错误
状态值为0表示执行正常:就是能够正常执行完命令
注1:上一条命令 指的不仅仅是类似于 ls 等这种简单的命令,还可以是:
[ 1 -lt 2 ] && [ 2 -lt 3 ] 这种复合命令
# 脚本后面接的参数的个数
@ 脚本后面所有参数,参数是独立的,也是全部输出
9 脚本后面的位置参数,
{10}~
! 后台运行的最后一个进程号 (当前终端)
!$ 调用最后一条命令历史中的参数
1.位置参数变量
进一步了解位置参数{n}
!/bin/bash
了解shell内置变量中的位置参数含义
1.sh 文件里面:
echo "$0 = # =
* =
@ =
1 =
2 =
3 =
11 =
12 = ${12}"
执行1.sh文件
- 进一步了解
@的区别
@:表示变量是独立的
!/bin/bash
for i in "i
done
echo "======我是分割线======="
for i in "i
done
[root@MissHou ~]# bash 3.sh a b c
a
b
c
======我是分割线=======
a b c
网友评论