LinuxShell环境变量初探

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
下面是一个典型的输出:
CC=gcc
CDPATH=.:~:/usr/local:/usr:/
CFLAGS=-O2 -fomit-frame-pointer
COLORTERM=gnome-terminal
CXXFLAGS=-O2 -fomit-frame-pointer
DISPLAY=:0
和PS1类似的还有PS2 PS3 PS4.
PS2 是用户次提示符tcsh没有. 一条命令没有结束 的话在二行给出的提示符. 默认>
2PS3 菜单提示符.保存用于select空置结果的菜单提示符
PS4 保存bash的调试提示符.
附二:保留变量
Bourne shell保留变量
Bash和 Bourne shell以同一种方法来使用特定的shell变量。某些情况下,Bash为变量分配一个默认的值。下表给出一个简单的shell变量的概览:
HOME | 当前用户的home目录;默认为内建命令 cd 。这个变量的值同样被~扩展使用。
IFS | 分割域的一个字符的列表;用于shell把词分开作为扩展。
MAIL | 如果这个变量设成一个文件名并且 MAILPATH 变量没有设置,Bash在指定文件中通知用户邮件的到达。
四、常用的环境变量如下:
$HOME 当前用户的主目录的全路径名
$LOGNAME 即注册名,由Linux自动设置。它是与系统交互的名字或字符串。
$PATH 以冒号分隔的用来搜索命令的目录列表
$PS1 命令提示符,通常是$,但在bash中可以使用一些更复杂的值。
$PS2 二级提示符,用来提示后续的输入,通常是>字符
Charles the Great
franky ~> exit
franky ~> echo $full_name
Franky M. Singh
franky ~>
当第一次尝试在子shell里面读取 full_name 的值时,它并不存在(echo 显示了一个空字符串)。子shell退出,然后 full_name 在父shell里面export,一个变量在赋值后仍然可以被export。然后一个新的子shell开始运行,从父shell那里export出来的变量是可见的。这个变量被修改来存放其他名字,但是在父shell中放置变量的值还是一样的。那么一个新的子shell启动后,从父shell那里export来的变量是可见的。当变量修改以存放一个其它的名字时,在父shell中这个变量的值仍然是原来的值。
PS2=More input>
PWD=/nethome/franky
SESSION_MANAGER=local/:/tmp/.ICE-unix/22106
SHELL=/bin/bash
SHELL_LOGIN=--login
...
//"..."表示省略
附一:环境变量PS的设置
PS1为Shell的主提示符。
\d :代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :完整的主机名称。
\! :当前事件编号
\h :仅取主机的第一个名字
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
BASH=/bin/bash
BASH_VERSINFO=([0]="2"
BASH_VERSION='2.05b.0(1)-release'
COLUMNS=80
DIRSTACK=()
DO_FORTUNE=
EUID=504
GROUPS=()
HERE=/home/franky
HISTFILE=/nethome/franky/.bash_history
2、可以创建一个新的环境变量,或者改变一个已有的环境变量的值,其形式与设置一般变量相同。如果变量值的字符串中带有空格等特殊字符,需要用引号把整个字符串括起来。利用export命令可以将这些变量导出,使它们成为公用量,如:
export HOME HZ LOGNAME TERM
3、可以利用env命令列出所有的环境变量,包括本进程及以前的“祖先进程”所导出的变量。
PS1 | 主要提示符。默认值是 “'\s-\v\$ '”。
PS2 | 次要提示符。默认值是 “'> '”。
Bash保留变量
这些变量是设置好的或者被Bash使用的,但是其他shell通常不会对它们进行特殊处理。
-----------------------------
$0 shell脚本的名字
$# 传递给脚本的参数个数
$$ shell脚本的进程号,脚本程序通常会用它来生成一个唯一的临时文件,如/tmp/tmpfile_$
二、和环境变量有关的命令
1、可以使用unset命令删除一个环境变量(如NAME):
$ unset NAME
4、检查环境变量值用echo命令 如:
$echo $HOME
输出为
/home/***(当前用户名)
5、用set命令列出所有环境变量
三、环境变量的用途和设定方法
程序经常使用环境变量来改变它们的工作方式。用户可以通过以下方式设置环境变量的值:在默认环境中、通过登录shell读取.profile文件来设置、使用shell专用的启动文件(rc)或在命令行上对变量进行设定。
表 3.2. 保留Bash变量
----------------------
变量名 定 义
auto_resume 这个变量控制shell如何与用户交互和作业控制。
BASH 用于执行当前Bash实例的全路径。
BASH_ENV 如果这个变量在Bash调用执行一个shell脚本时已被设置,它的值将被展开并用作在执行脚本前读取的启动文件名。
export VARNAME="value"
一个子shell能够改变从父shell变量继承过来的变量,但是在子shell所作的改变对父shell也没有影响。下面的例子来证明这个:
franky ~> full_name="Franky M. Singh"
franky ~> bash
franky ~> echo $full_name
DOMAIN=
...
HISTFILESIZE=5000
...
HOME=/nethome/franky
HOSTNAME=
INPUTRC=/etc/inputrc
...
LS_COLORS=...
...
OS=Linux
$处在什么位置。
$SHELL 当前使用的Shell,它也指出Shell解释程序放在什么地方。
$TERM 终端类型。
$IFS 输入域分隔符。当shell读取输入时,用来分隔单词的一组字符,通常是空格、制表符和换行符。
\@ :按12小时制 AM/PM格式显示当前时间值
PS1设置的好话可以是你很方便地知道 你现在处于什么样的目录下.哪台主机等....
不过在shell的直接设置只对当前有效.要使永远有效.可以将设置写入 到~/.bash_profile 文件的最后.如添加一个PS1="\u@\h \W \!]$ "
MAILPATH | 一个用冒号分隔的文件名列表,shell周期性地从这个文件里检测新邮件。
OPTARG getopts | 内建命令处理的最后的选项参数的值。
OPTIND | 最后一个由 getopts 内建命令处理的选项参数的索引号。
PATH | 一个用冒号分隔的目录列表,shell从这些目录里寻找命令。
2、本地变量
本地变量只存在于当前shell。使用内建的不带选项的 set 命令将显示所有变量的列表(包括环境变量)和函数。输出会根据当前的设置排列而且以可以重用的方式显示。
以下是在退出了同样被 set 命令显示的函数之后,比较printenv 和 set 的输出的文件:
BASE=/nethome/franky/.Shell//octarine.aliases
franky ~> exit
franky ~> export full_name
franky ~> bash
franky ~> echo $full_name
Franky M. Singh
franky ~> export full_name="Charles the Great"
franky ~> echo $full_name
...
二、建立变量
默认情况下,变量是区分大小写的。某些时候给予一个本地变量小写字母是约定俗成的。然而,你可以自由的使用这些名字或者混合大小写。变量也可以包含数字,但是数字开头的名字是不允许的:
prompt> export 1number=1
bash: export: `1number=1': not a valid identifier
PAGER=less
PATH=/nethome/franky/bin.Linux:/nethome/franky/bin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin:.
PS1=\[\033[1;44m\]franky is in \w\[\033[0m\]
----------------------------------------
表 3.1. 保留的 Bourne shell 变量
----------------------------------------
变量名字 | 定义
CDPATH | 一个由冒号分割的目录列表作为内建命令 cd 的搜索路径。
注意,如果要使用环境变量或其它Shell变量的值,必须在变量名之前加上一个“$”符号,不能直接使用变量名。
一、 环境变量的类型
1、全局变量
全局变量或者环境变量存在于所有的shell里面。env 或者 printenv 命令能够通常用于显示环境变量。这些程序在 sh-utils 包内。
在shell中设置一个变量,使用
VARNAME="value"
在等号周围放置空格会造成错误。在对变量赋值得时候把内容字符串用引号引起来是一个良好的习惯:这样会降低出错的机会。
三、导出变量Exporting variables
一个变量的建立后就像上面的例子那样仅仅存在于当前shell。它是本地变量:当前shell的子进程不会意识到这个的存在。为了把变量传递到子shell,我们需要使用内建的 export 命令把他们 输出 出来。被输出出来的变量就像环境变量一样,设置和输出变量通常用下面一步来完成:
Linux/Shell环境变量初探
Linux环境(也称为Shell环境)由许多变量及这些变量的值组成。这些变量和变量的值决定了用户环境的外观。并且当一个shell脚本程序开始执行时,一些变量会根据环境设置中的值进行初始化。这些变量通常用大写字母做名字,以便把它们和用户在脚本程序里定义的变量区分开来,后者按惯例都用小写字母做名字。具体创建的变量取决于个人配置。在系统的使用手册中列出了许多这样的环境变量。
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称。家目录会以 ~代替
\W :利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令
\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$
相关文档
最新文档