您的位置:首页 > 运维架构 > Shell

bash 环境变量

2015-09-06 20:45 375 查看
bash环境配置:

shell登录类型:
交互式登录:取得bash时,需要完整的登录流程,需要用户名密码
直接通过终端使用账号密码进行的登录;
通过su - l USERNAME 命令实现的用户切换
非交互式登录:取得bash接口的方法不需要重复登录操作
图形界面下打开的命令行窗口;
执行脚本;
su USERNAME命令;

配置文件:
生效范围划分,存在两类:
全局配置: 系统的整体设置,不建议修改此文件
/etc/profile,/etc/profile.d/*.sh
/etc/bashrc
个人配置: 用户个人设置
~/.bash_profile
~/.bashrc

按功能划分,存在两类:
profile类:
交互式登录的shell提供配置
/etc/profile,/etc/profile.d/*.sh
~/.bash_profile

功用:
1 定义环境变量,例如PATH,PS1
2 运行命令或脚本

bashrc类:
非交互式登录shell提供配置
/etc/bashrc
~/.bashrc

功用:
定义命令别名
定义本地变量

变量:内存空间,变量名
变量设置规则:
变量与变量内容以一个等号连接,例:mypc=roger
等号两边不能直接接空格,否则报错 例:m = 3
变量名只能是英文字母与数字,不能以数字开头;
变量连接,使用“$变量名”或 ${变量}连接内容
[roger@oc3137372501 ~]$ echo "$mypc"wang
rogerwang
[roger@oc3137372501 ~]$ echo ${mypc}wang
rogerwang
若其它子进程需要使用该变量,则需要export来使变量变成环境变量
“export mypc”

类型:
环境变量 作用范围 当前shell进程及其子进程
功能:主文件夹HOME的变换,提示符ps1的显示,执行文件查找路径
env查看变量变量

[roger@oc3137372501 ~]$ env
HOSTNAME=oc3137372501.xxx.com------->主机名
SELINUX_ROLE_REQUESTED=
TERM=xterm ------------------------->终端使用的环境是什么类型
SHELL=/bin/bash -------------------->目前环境下使用的shell
HISTSIZE=1000 ---------------------->记录命令条数
SSH_CLIENT=9.181.102.147 41553 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/1 ------------------>用户使用终端
USER=roger -------------------------->用户名
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=01;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:*.jpg=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=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.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:
GNOME_DISABLE_CRASH_DIALOG=1
MAIL=/var/spool/mail/roger ----------->用户默认邮箱
PATH=/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/ibm/c4eb/bin:/usr/kerberos/bin:/home/roger/bin
PWD=/home/roger----------------------->用户所在当前目录
LANG=en_US.UTF-8 --------------------->当前所使用语系
KDE_IS_PRELINKED=1
MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles
LOADEDMODULES=
KDEDIRS=/usr
PD_SOCKET=6874
SELINUX_LEVEL_REQUESTED=
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
HISTCONTROL=ignoredups
SHLVL=1
HOME=/home/roger
LOGNAME=roger
QTLIB=/usr/lib64/qt-3.3/lib
CVS_RSH=ssh
SSH_CONNECTION=9.181.102.147 41553 9.181.102.147 22
MODULESHOME=/usr/share/Modules
LESSOPEN=||/usr/bin/lesspipe.sh %s
PDHOST=
G_BROKEN_FILENAMES=1
BASH_FUNC_module()=() {  eval `/usr/bin/modulecmd bash $*`
}
_=/bin/env
本地变量 作用范围 当前shell进程
局部变量 作用范围 仅为当前shell进程中某代码片断(通常为函数上下文)

位置变量: $1 $2 ... 第一个参数,第二个参数...

特殊变量: $? 上一次命令执行的状态码

变量定义方式:
bash内置变量:可直接调用,内置了许多环境变量,例如:PATH等
自定义变量:
变量赋值: 变量=值

bash弱类型:
变量存储数据时,默认均采用字符形式;任何变量可以不经声明,直接引用
例: myClass=one

定义本地变量:
name=value
set命令:查看所有变量(环境变量与自定义变量)

定义环境变量
export name=value 将自定义变量,转换成环境变量

declare -x name=value 定义环境变量
declare命令:
语法:declare [-aixr] variable
参数:
-a:将后面名为variable的变量定义成为数组(array)类型
-i:将后面名为variable的变量定义成为整数数字(integer)类型
-x:相当于export,将后边的variable变成环境变量
-r:将变量设置成readonly类型,该变量不能更改内容,也不能重新赋值;

查看环境变量 env, printenv,export
env命令:在修改的环境变量中执行命令
env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]
-i:忽略环境变量执行命令
-u,--unset=NAME:移除指定变量
没有选项的情况下,显示所有环境变量
[root@oc3137372501 ~]# env $PATH
env: /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin
printenv - print all or part of environment 输出全部或者部分环境变量
printenv [OPTION]... [VARIABLE]...

撤销变量:
unset name

引用变量:
${name} 或 $name

[root@oc3137372501 ~]# echo ${mypc},$mypc
first,first
bash中的引用符号:
'':强引用:变量不会被替换,按字符串输出
[root@oc3137372501 ~]# echo '$mypc'
$mypc
"":弱引用:变量内容会输出。
[root@oc3137372501 ~]# echo "$mypc"
first
` `或$( ):命令引用, 把一个命令的执行结果直接引用 例如:
[root@oc3137372501 ~]# ls -l `which cat`
-rwxr-xr-x. 1 root root 48568 Jul 16  2014 /bin/cat
[root@oc3137372501 ~]# ls -l $(which cat)
-rwxr-xr-x. 1 root root 48568 Jul 16  2014 /bin/cat

配置文件作用次序
注意:生效的变量是最后出现的变量
交互式登录:
/etc/profile ---> /etc/profile.d/*.sh ---> ~/.bash_profile --> /etc/bashrc
非交互式登录:
~/.bash --> /etc/bashrc/ --> /etc/profile.d/*.sh

编辑的配置文件定义的新配置如何生效
1 注销

2 让当前shell去重新读取指定的配置文件
source /PATH/TO/SOMEFILE
. /PATH/TO/SOMEFILE
注意:副作用 读两遍后,环境变量在PATH出现两遍

常见的环境变量
  PATH:决定了shell将到哪些目录中寻找命令或程序
  HOME:当前用户主目录
  MAIL:是指当前用户的邮件存放目录。
  SHELL:是指当前用户用的是哪种Shell。
  HISTSIZE:是指保存历史命令记录的条数。
  LOGNAME:是指当前用户的登录名。
  HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
  LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
  PS1:是基本提示符,对于root用户是#,对于普通用户是$。
  PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,

问题:
定义对所有用都生效的别名?
通过编辑/etc/bashrc文件添加别名设置,将会对所有用户生效。


如果仅需要PATH环境变量的修改仅对root用户生效,该如何操作?
通过编辑root用户家目录下.bash_profile文件设置只对root用户生效的环境变量


如有错误,敬请指正!谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: