|NO.Z.00046|——————————|^^实验^^|——|Linux&Shell$变量.V03|——|环境变量|ENV|修改默认提示符|
一、环境变量:环境变量设置
### --- 环境变量设置
~~~ 使用 export 声明的变量即是环境变量
[root@localhost ~]# export age="18"
二、环境变量查询和删除
### --- 环境变量查询和删除
~~~ 删除环境变量 gender
~~~ env 命令和 set 命令的区别是,set 命令可以查看所有变量,而 env 命令只能查看环境变量。
[root@localhost ~]# unset gender
[root@localhost ~]# env | grep gender
三、系统默认环境变量:env
### --- 系统默认环境变量:env
[root@localhost ~]# env
HOSTNAME=localhost.localdomain // 主机名
SHELL=/bin/bash // 当前的 shell
TERM=linux // 终端环境
HISTSIZE=1000 // 历史命令条数
SSH_CLIENT=192.168.4.159 4824 22 // 当前操作环境是用 ssh 连接的,这里记录客户端 ip
SSH_TTY=/dev/pts/1 // ssh 连接的终端时 pts/1
USER=root // 当前登录的用户
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;
01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=
01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01
;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=0
1;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31
:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.j
pg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga
=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=
01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01
;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35
:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.
flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=0
1;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;3
6:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*
.wav=01;36:*.axa=01;36:*.
oga=01;36:*.spx=01;36:*.xspf=01;36: // 定义颜色显示
age=18 // 我们刚刚定义的环境变量
PATH=/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/
root/bin // 系统查找命令的路径
MAIL=/var/spool/mail/root // 用户邮箱
PWD=/root // 当前所在目录
LANG=zh_CN.UTF-8 // 语系
HOME=/root // 当前登录用户的家目录
SHLVL=2 // 当前在第二层子 shell 中。还记得我们刚刚进入了一个子 shell 吗?如果是第一层 shell,这里是 1
LOGNAME=root // 登录用户
_=/bin/env // 上次执行命令的最后一个参数或命令本身
四、系统默认环境变量:set
### --- 系统默认环境变量:set
~~~ env 命令可以查询到所有的环境变量,可是还有一些变量虽然不是环境变量,
~~~ 却是和 Bash 操作接口相关的变量,这些变量也对我们的 Bash 操作终端起到了重要的作用。
~~~ 这些变量就只能用 set 命令来查看了,我只列出重要的内容吧:
[root@localhost ~]# set
BASH=/bin/bash // Bash 的位置
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release"
[5]="i386-redhat-linux-gnu") // Bash 版本
BASH_VERSION='4.1.2(1)-release' // bash的版本
COLORS=/etc/DIR_COLORS // 淹死记录文件
HISTFILE=/root/.bash_history // 历史命令保存文件
HISTFILESIZE=1000 // 在文件当中记录的历史命令最大条数
HISTSIZE=1000 // 在缓存中记录的历史命令最大条数
LANG=zh_CN.UTF-8 // 语系环境
MACHTYPE=i386-redhat-linux-gnu // 软件类型是 i386 兼容类型
MAILCHECK=60 // 每60秒去扫描新邮件
PPID=2166 // 父 shell 的 PID。我们当前 Shell 是一个子 shell
PS1='[\u@\h \W]\$ ' // 命令提示符
PS2='> ' // 如果命令一行没有输入完成,第二行命令的提示符
UID=0 // 当前用户的 UID
五、系统默认环境变量:PATG
### --- 系统默认环境变量:PATG
~~~ # PATH 变量:系统查找命令的路径先查询下 PATH 环境变量的值:
~~~ PATH 变量的值是用“:”分割的路径,这些路径就是系统查找命令的路径。
~~~ 也就是说当我们输入了一个程序名,如果没有写入路径,
~~~ 系统就会到 PATH 变量定义的路径中去寻找,是否有可以执行的程序。
~~~ 如果找到则执行,否则会报“命令没有发现”的错误。
~~~ 那么是不是我们把自己的脚本拷贝到 PATH 变量定义的路径中,
~~~ 我们自己写的脚本也可以不输入路径而直接运行呢?
[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
### --- 拷贝 hello.sh 到/bin 目录
~~~ hello.sh 可以直接执行了
~~~ 那么我们是不是可以修改 PATH 变量的值,而不是把程序脚本复制到/bin/目录中。
~~~ 当然是可以的,我们通过变量的叠加就可以实现了:
[root@localhost ~]# cp /root/sh/hello.sh /bin/
[root@localhost ~]# hello.sh
Mr. Shen Chao is the most honest man.
### --- 在变量 PATH 的后面,加入/root/sh 目录
[root@localhost ~]# PATH="$PATH":/root/sh
### --- 查询 PATH 的值,变量叠加生效了
~~~ 当然我们这样定义的 PATH 变量只是临时生效,一旦重启或注销就会消失,如果想要永久生效,
~~~ 需要写入环境变量配置文件,我们在“环境变量配置文件”小节中再详细介绍。
~~~ PS1 变量:命令提示符设置
~~~ PS1 是一个很有意思的变量(这可不是 SONY 的游戏机哦),是用来定义命令行的提示符的,
~~~ # 可以安装我们自己的需求来定义自己喜欢的提示符。PS1 可以支持以下这些选项:
~~~ \d:显示日期,格式为“星期 月 日”
~~~ \H:显示完整的主机名。如默认主机名“localhost.localdomain”
~~~ \h:显示简写主机名。如默认主机名“localhost”
~~~ \t:显示 24 小时制时间,格式为“HH:MM:SS”
~~~ \T:显示 12 小时制时间,格式为“HH:MM:SS”
~~~ \A:显示 24 小时制时间,格式为“HH:MM”
~~~ \@:显示 12 小时制时间,格式为“HH:MM am/pm”
~~~ \u:显示当前用户名
~~~ \v:显示 Bash 的版本信息
~~~ \w:显示当前所在目录的完整名称
~~~ \W:显示当前所在目录的最后一个目录
~~~ \#:执行的第几个命令
~~~ \$:提示符。如果是 root 用户会显示提示符为“#”,如果是普通用户会显示提示符为
[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/
bin:/root/sh
六、系统默认环境变量:PS1变量
### --- 系统默认环境变量:PS1变量
~~~ #“$”:这些选项该怎么用啊?我们先看看 PS1 变量的默认值吧:
[root@localhost ~]# echo $PS1
[\u@\h \W]\$
### --- 默认的提示符是显示“[用户名@简写主机名 最后所在目录]提示符”
~~~ 在 PS1 变量中,如果是可以解释的符号,如“\u”、“\h”等,则显示这个符号的作用。
~~~ 如果是不能解释的符号,如“@”或“空格”,则原符号输出。
~~~ 那么我们修改下 PS1 变量,看看会出现社么情况吧:
~~~ 修改提示符为‘[用户名@当前时间 当前所在完整目录]提示符’
[root@localhost ~]# PS1='[\u@\t \w]\$ '
~~~ 切换下当前所在目录,因为家目录是看不出来区别的
~~~ 看到了吗?提示符按照我们的设计发生了变化
~~~ 这里要小心,PS1 变量的值要用单引号包含,否则设置不生效。再举个例子吧:
[root@04:46:40 ~]#cd /usr/local/src/
[root@04:47:29 /usr/local/src]#
[root@04:50:08 /usr/local/src]# PS1='[\u@\@ \h \# \W]\$'
[root@04:53 上午 localhost 31 src]#
~~~ 提示符又变了。\@:时间格式是 HH:MM am/pm;\#:会显示执行了多少个命令
~~~ PS1 变量可以自由定制,好像看到了点 Linux 可以自由定制和修改的影子,还是很有意思的。
~~~ 不过说实话一个提示符已经使用习惯了,如果换一个还是非常别扭的,还是改回默认的提示符吧:
[root@04:53 上午 localhost 31 src]#PS1='[\u@\h \W]\$ '
[root@localhost src]#
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv008-shell
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」