在前面学过一个变量PATH,它是shell预设的一个变量。通常,shell预设的变量都是大写的。变量就是使用一个较简单的字符串来代替某些具有特殊意义的设定以及数据。PATH就代替了所有常用命令的绝对路径的设定。有了PATH这个变量,我们运行某个命令时,就不再需要输入全局路径,直接输入命令命即可。
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $PWD
/root
[root@localhost ~]# echo $LOGNAME
root
[root@localhost ~]# env
XDG_SESSION_ID=2
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.56.1 51097 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
USER=root
。。。。。。。。。
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.56.1 51097 192.168.56.128 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
说明:登录不同的用户,这些环境变量的值也不同。当前显示的是root账户的环境变量。
HOSTNAME :表示主机的名称
SHELL :表示当前用户的shell类型
HISTSIZE :表示历史记录数
MAIL :表示当前用户的邮件存放目录
PATH :该变量决定了shell将到哪些目录中寻找命令或者程序。
LANG :这是与语言相关的环境变量,多语言环境可以修改此环境变量。
PWD :表示当前目录
HOME :表示当前用户的家目录
LOGNAME :表示当前用户的登录名
env命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用set命令把系统预设的全部变量都显示出来。
[root@localhost ~]# set |grep 1.txt
a=1.txt
字母、数字下划线,首位不能为数字;变量值有特殊符号时需要用单引号括起来(单引号有脱意功能)。
[root@localhost ~]# a=123
[root@localhost ~]# b=456
[root@localhost ~]# c="$a$b"789
[root@localhost ~]# echo $c
123456789
说明:当累加的时候只能是双引号。
# myname="DL Li"
# echo $myname
DL Li
# myname="DL 's"
# echo $myname
DL 's
# myname=`pwd`
#echo $myname
/root
#myname="$LOGNAME"DL
#echo $myname
rootDL
#myname='$LOGNAME'DL
#echo $myname
$LOGNAMEDL
export
当在一个父shell下设定一个变量后,进入子shell该变量并不生效,如果想让该变量在子shell下生效需要使用export声明一下才可以(跨终端不生效)。
语法: export [变量名] 当export不指定变量时,它会声明系统所有变量。
[root@localhost ~]# a=DL
[root@localhost ~]# echo $a
DL
[root@localhost ~]# export a=DL
[root@localhost ~]# echo $a
DL
[root@localhost ~]# bash //在同一个sshd重新打开一个bash(相当于全局变量)
[root@localhost ~]# echo $a
DL
说明: 当在子shell设定变量后即便声明后也不能在父shell生效。
[root@localhost ~]# w
15:34:47 up 2:18, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 13:17 2:17m 0.04s 0.04s -bash
root pts/0 192.168.56.1 13:18 7.00s 0.20s 0.00s w
root pts/1 192.168.56.1 14:55 9:43 0.03s 0.03s -bash
[root@localhost ~]# echo $SSH_TTY
/dev/pts/0
[root@adai002 ~]# bash[root@adai002 ~]# pstreesystemd─┬─NetworkManager───2*[{NetworkManager}]
├─auditd───{auditd}
├─chronyd
├─crond
├─dbus-daemon
├─firewalld───{firewalld}
├─login───bash
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─polkitd───5*[{polkitd}]
├─rsyslogd───2*[{rsyslogd}]
├─sshd───sshd─┬─bash───bash───pstree //可见,在同一个sshd中打开了两个bash。第二个bash相当于子shell
│ └─bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
└─vmtoolsd───{vmtoolsd}
[root@localhost ~]# a=12312312
[root@localhost ~]# echo $a
12312312
[root@localhost ~]# unset a
[root@localhost ~]# echo $a
环境变量配置文件分为系统环境变量配置文件和用户环境变量配置文件。
系统配置文件(严禁改动)
/etc/profile 用户环境变量,交互,登录才执行
/etc/bashrc 用户不用登录,执行shell就生效
用户配置文件
# echo $PS1
[\u@\h \w]\$
其中,\u指用户,\h指主机名,\w指当前目录,$指字符(如果当前是普通用户,会显示$)
.bash_history 记录命令历史
.bash_logout 在此可以设定退出登录时系统执行的操作(如清除缓存、清除历史记录等等)