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:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,


问题:

  1. 定义对所有用都生效的别名?

    通过编辑/etc/bashrc文件添加别名设置,将会对所有用户生效。

  2. 如果仅需要PATH环境变量的修改仅对root用户生效,该如何操作?

    通过编辑root用户家目录下.bash_profile文件设置只对root用户生效的环境变量


如有错误,敬请指正!

谢谢!