使用Linux环境变量(shell04)

20 篇文章 1 订阅

使用Linux环境变量

全局环境变量

查看全局变量,可以使用env或printenv命令

显示个别环境变量的值,可以使用printenv、echo 命令

printenv HOME
/home/Christine

echo $HOME
/home/Christine

全局环境变量可用于进程的所有子shell

局部环境变量

部环境变量只能在定义它们的进程中可见

set命令会显示为某个特定进程设置的所有环境变量,包括局部变量、全局变量以及用户定义变量。

设置用户定义变量

通过等号给环境变量赋值,值可以是数值或字符串

变量名、等号和值之间没有空格 如果在赋值表达式中加上了空格,bash shell就会把值当成一个单独的命令

设置全局环境变量

通过export命令来完成,变量名前面不需要加$

修改子shell中全局环境变量并不会影响到父shell中该变量的值

删除环境变量

unset命令中引用环境变量时,记住不要使用$

何时使用$

如果要用到变量,使用 ;如果要操作变量,不使用 ;如果要操作变量,不使用 ;如果要操作变量,不使用。这条规则的一个例外就是使用printenv显示某个变量的值。

默认的 shell 环境变量

bash shell支持的Bourne变量

  • CDPATH 冒号分隔的目录列表,作为cd命令的搜索路径
  • HOME 当前用户的主目录
  • IFS shell用来将文本字符串分割成字段的一系列字符
  • MAIL 当前用户收件箱的文件名( bash shell会检查这个文件,看看有没有新邮件)
  • MAILPATH 冒号分隔的当前用户收件箱的文件名列表( bash shell会检查列表中的每个文件,看看有没有新邮件)
  • OPTARG getopts命令处理的最后一个选项参数值
  • OPTIND getopts命令处理的最后一个选项参数的索引号
  • PATH shell查找命令的目录列表,由冒号分隔
  • PS1 shell命令行界面的主提示符
  • PS2 shell命令行界面的次提示符

bash shell环境变量

  • BASH 当前shell实例的全路径名
  • BASH_ALIASES 含有当前已设置别名的关联数组
  • BASH_ARGC 含有传入子函数或shell脚本的参数总数的数组变量
  • BASH_ARCV 含有传入子函数或shell脚本的参数的数组变量
  • BASH_CMDS 关联数组,包含shell执行过的命令的所在位置
  • BASH_COMMAND shell正在执行的命令或马上就执行的命令
  • BASH_ENV 设置了的话,每个bash脚本会在运行前先尝试运行该变量定义的启动文件
  • BASH_EXECUTION_STRING 使用bash -c选项传递过来的命令
  • BASH_LINENO 含有当前执行的shell函数的源代码行号的数组变量
  • BASH_REMATCH 只读数组,在使用正则表达式的比较运算符=~进行肯定匹配( positive match)时,包含了匹配到的模式和子模式
  • BASH_SOURCE 含有当前正在执行的shell函数所在源文件名的数组变量
  • BASH_SUBSHELL 当前子shell环境的嵌套级别(初始值是0)
  • BASH_VERSINFO 含有当前运行的bash shell的主版本号和次版本号的数组变量
  • BASH_VERSION 当前运行的bash shell的版本号
  • BASH_XTRACEFD 若设置成了有效的文件描述符( 0、 1、 2),则’set -x’调试选项生成的跟踪输出可被重定向。通常用来将跟踪输出到一个文件中
  • BASHOPTS 当前启用的bash shell选项的列表
  • BASHPID 当前bash进程的PID
  • COLUMNS 当前bash shell实例所用终端的宽度
  • COMP_CWORD COMP_WORDS变量的索引值,后者含有当前光标的位置
  • COMP_LINE 当前命令行
  • COMP_POINT 当前光标位置相对于当前命令起始的索引
  • COMP_KEY 用来调用shell函数补全功能的最后一个键
  • COMP_TYPE 一个整数值,表示所尝试的补全类型,用以完成shell函数补全
  • COMP_WORDBREAKS Readline库中用于单词补全的词分隔字符
  • COMP_WORDS 含有当前命令行所有单词的数组变量
  • COMPREPLY
  • COPROC含有由shell函数生成的可能填充代码的数组变量占用未命名的协进程的I/O文件描述符的数组变量
  • DIRSTACK 含有目录栈当前内容的数组变量
  • EMACS 设置为’t’时,表明emacs shell缓冲区正在工作,而行编辑功能被禁止
  • ENV 如果设置了该环境变量,在bash shell脚本运行之前会先执行已定义的启动文件(仅用于当bash shell以POSIX模式被调用时)
  • EUID 当前用户的有效用户ID(数字形式)
  • FCEDIT 供fc命令使用的默认编辑器
  • FIGNORE 在进行文件名补全时可以忽略后缀名列表,由冒号分隔
  • FUNCNAME 当前执行的shell函数的名称
  • FUNCNEST 当设置成非零值时,表示所允许的最大函数嵌套级数(一旦超出,当前命令即被终止)
  • GLOBIGNORE 冒号分隔的模式列表,定义了在进行文件名扩展时可以忽略的一组文件名
  • GROUPS 含有当前用户属组列表的数组变量
  • histchars 控制历史记录扩展,最多可有3个字符
  • HISTCMD 当前命令在历史记录中的编号
  • HISTCONTROL 控制哪些命令留在历史记录列表中
  • HISTFILE 保存shell历史记录列表的文件名(默认是.bash_history)
  • HISTFILESIZE
  • HISTTIMEFORMAT最多在历史文件中存多少行如果设置了且非空,就用作格式化字符串,以显示bash历史中每条命令的时间戳
  • HISTIGNORE 由冒号分隔的模式列表,用来决定历史文件中哪些命令会被忽略
  • HISTSIZE 最多在历史文件中存多少条命令
  • HOSTFILE shell在补全主机名时读取的文件名称
  • HOSTNAME 当前主机的名称
  • HOSTTYPE 当前运行bash shell的机器
  • IGNOREEOF shell在退出前必须收到连续的EOF字符的数量(如果这个值不存在,默认是1)
  • INPUTRC Readline初始化文件名(默认是.inputrc)
  • LANG shell的语言环境类别
  • LC_ALL 定义了一个语言环境类别,能够覆盖LANG变量
  • LC_COLLATE 设置对字符串排序时用的排序规则
  • LC_CTYPE 决定如何解释出现在文件名扩展和模式匹配中的字符
  • LC_MESSAGES 在解释前面带有$的双引号字符串时,该环境变量决定了所采用的语言环境设置
  • LC_NUMERIC 决定着格式化数字时采用的语言环境设置
  • LINENO 当前执行的脚本的行号
  • LINES 定义了终端上可见的行数
  • MACHTYPE 用“ CPU公司系统”( CPU-company-system)格式定义的系统类型
  • MAPFILE 一个数组变量,当mapfile命令未指定数组变量作为参数时,它存储了mapfile所读入的文本
  • MAILCHECK shell查看新邮件的频率(以秒为单位,默认值是60)
  • OLDPWD shell之前的工作目录
  • OPTERR 设置为1时, bash shell会显示getopts命令产生的错误
  • OSTYPE 定义了shell所在的操作系统
  • PIPESTATUS 含有前台进程的退出状态列表的数组变量
  • POSIXLY_CORRECT 设置了的话, bash会以POSIX模式启动
  • PPID bash shell父进程的PID
  • PROMPT_COMMAND 设置了的话,在命令行主提示符显示之前会执行这条命令
  • PROMPT_DIRTRIM 用来定义当启用了\w或\W提示符字符串转义时显示的尾部目录名的数量。被删除的目录名会用一组英文句点替换
  • PS3 select命令的提示符
  • PS4 如果使用了bash的-x选项,在命令行之前显示的提示信息
  • PWD 当前工作目录
  • RANDOM 返回一个0~ 32767的随机数(对其的赋值可作为随机数生成器的种子)
  • READLINE_LINE 当使用bind –x命令时,存储Readline缓冲区的内容
  • READLINE_POINT 当使用bind –x命令时,表示Readline缓冲区内容插入点的当前位置
  • REPLY read命令的默认变量
  • SECONDS 自从shell启动到现在的秒数(对其赋值将会重置计数器)
  • SHELL bash shell的全路径名
  • SHELLOPTS 已启用bash shell选项列表,列表项之间以冒号分隔
  • SHLVL shell的层级;每次启动一个新bash shell,该值增加1
  • TIMEFORMAT 指定了shell的时间显示格式
  • TMOUT select和read命令在没输入的情况下等待多久(以秒为单位)。默认值为0,表示无限长
  • TMPDIR 目录名,保存bash shell创建的临时文件
  • UID 当前用户的真实用户ID(数字形式)

尽管这些都是默认环境变量,但并不是每一个都必须有一个值

设置 PATH 环境变量

PATH=$PATH:/home/christine/Scripts

定位系统环境变量

启动bashshell有3种方式:

  • 登录时作为默认登录shell
  • 作为非登录shell的交互式shell
  • 作为运行脚本的非交互shell
登录 shell

登录shell会从5个不同的启动文件里读取命令

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

/etc/profile文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。

$HOME目录下的启动文件
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

shell会按照按照下列顺序,运行第一个被找到的文件,余下的则被忽略:

  1. $HOME/.bash_profile
  2. $HOME/.bash_login
  3. $HOME/.profile

注意,这个列表中并没有$HOME/.bashrc文件。这是因为该文件通常通过其他文件运行的。

数组变量

要给某个环境变量设置多个值,可以把值放在括号里,值与值之间用空格分隔。

#声明定义数组
mytest=(one two three four five)
#打印数组第一个值
echo $mytest
one
#打印数组第三个值
echo ${mytest[2]}
three
#打印整个数组
echo ${mytest[*]}
one two three four five
#设置数组值
mytest[2]=seven
echo ${mytest[*]}
one two seven four five
#删除数组成员
unset mytest[2]
echo ${mytest[*]}
one two four five
#打印数组成员
echo ${mytest[2]}
#打印数组成员
echo ${mytest[3]}
four
#删除整个数组
unset mytest
#打印数组
echo ${mytest[*]}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

omnibots

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值