码迷,mamicode.com
首页 > 系统相关 > 详细

[第二章]Shell 变量

时间:2015-08-28 17:13:25      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

 

一、变量
  • 变量就是使用一个较简单的字符串来代替某些具有特殊意义的设定以及数据。就拿PATH来说,这个PATH就代替了所有常用命令的绝对路径的设定,有了PATH这个变量,我们运行某个命令时就不再需要输入全局路径,直接输入命令名即可。
[root@Shell ~]# echo $PATH        <==输出PATH变量
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@Shell ~]# echo $HOME        <==表示当前用户的主目录
/root
[root@Shell ~]# echo $PWD        <==显示当前目录
/root
[root@Shell ~]# echo $LOGNAME        <==表示当前用的登录名
root 
  1. 命令env
[root@Shell ~]# env        <==列出系统预设的全部系统变量
HOSTNAME=Shell
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.66.246 51689 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
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=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:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=en_US.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.66.246 51689 192.168.31.186 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/bin/env
  • 登陆不同的用户,这些环境变量的值也不同。当前是显示root用户的环境变量
  • HOSTNAME:        <== 主机的名称
  • SHELL:        <== 当前用户的shell类型
  • HISTSIZE:        <== 历史纪录数
  • MAIL:        <== 当前用户的邮件存放目录
  • PATH:        <== 该变量决定了shell将到哪些目录中寻找命令或程序
  • PWD:        <== 当前目录
  • LANG:        <== 这是跟语言相关的环境变量,多语言环境变量可以修改环境此环境变量
  • HOME:        <== 当前用户的主目录
  • LOGNAME:        <== 当前用户的登录名
  • env命令显示的变量只是环境变量,系统预设的变了其实还有很多。可以通过 set把系统预设变量都显示出来
 2、命令set
[root@Shell ~]# set            <==把系统预设变量都显示出来
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="i386-redhat-linux-gnu")
BASH_VERSION=‘4.1.2(1)-release‘
COLORS=/etc/DIR_COLORS
COLUMNS=80
DIRSTACK=()
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=Shell
HOSTTYPE=i386
ID=0
IFS=$‘ \t\n‘
LANG=en_US.UTF-8
LESSOPEN=‘|/usr/bin/lesspipe.sh %s‘
LINES=24
LOGNAME=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=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:‘
MACHTYPE=i386-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=1162
PROMPT_COMMAND=‘printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"‘
PS1=‘[\u@\h \W]\$ ‘
PS2=‘> ‘
PS4=‘+ ‘
PWD=/root
SELINUX_LEVEL_REQUESTED=
SELINUX_ROLE_REQUESTED=
SELINUX_USE_CURRENT_RANGE=
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT=‘192.168.66.246 51689 22‘
SSH_CONNECTION=‘192.168.66.246 51689 192.168.31.186 22‘
SSH_TTY=/dev/pts/0
TERM=xterm
UID=0
USER=root
_=set
colors=/etc/DIR_COLORS
  • set命令不仅可以显示系统预设变量,也可以显示用户自定义的变量
[root@Shell ~]# a=1            <==定义变量a=1
[root@Shell ~]# echo $a            <==输出变量 a
1
[root@Shell ~]# set | grep ‘^a‘            <==查看 set 里面是否有变量 a
a=1
  • 上面虽然可以自定义变量但是该变量只能在当前shell中生效
[root@Shell ~]# echo $a            <==输出变量 a
1
[root@Shell ~]# bash            <==进入一个子shell环境
[root@Shell ~]# echo $a            <==输出变量a
[root@Shell ~]# exit            <==退出子shell,回到原来的shell
exit
[root@Shell ~]# echo $a            <==输出变量a
1
  • 使用bash命令可以打开一个子shell,此时先前设置的 $a 变量已经不存在了,退出当前shell回到原来的shell,$a 还在,如果想让环境变量一直生效,两种方法
  •     1)直接使用命令export 需要定义的变量
[root@Shell ~]# export a=1         <==定义该变量
[root@Shell ~]# echo $a            <==输出变量 a
1
[root@Shell ~]# bash            <==进入一个子shell环境
[root@Shell ~]# echo $a            <==输出变量a
1
[root@Shell ~]# exit            <==退出子shell,回到原来的shell
exit
  •     2)修改/etc/profile 允许系统内所有用户登录后都能使用该命令
[root@Shell ~]# vim /etc/profile            <==在/etc/profile文件的最后一行加入 export a=1
export a=1
[root@Shell ~]# source /etc/profile            <==使/etc/profile生效
  • 定义自定义变量的规则
  • 设定变量的格式为 “a=b”,其中a为变量名,b变量的内容,等号两边不能有空格
  • 变量只能由数字、字母以及下划线组成,而且不能以数字开头
  • 当变量内容带有特殊字符(如空格)时,需要加上单引号
[root@Shell ~]# b=‘vforbox xiaoling‘            <==定义变量为 vforbox xiaoling
[root@Shell ~]# echo $b           <==输出 $b
vforbox xiaoling
  • 如果变量内容中本身就有单引号,这时候就得加上双引号了
[root@Shell ~]# c="1 ‘2"
[root@Shell ~]# echo $c
1 ‘2
  • 设置变量后,如果想取消某个变量,只要输入 unset 变量名
[root@Shell ~]# echo $d        <==输出$d
1
[root@Shell ~]# unset d        <==取消定义的变量
[root@Shell ~]# echo $d        <==输出$d
 
二、系统环境变量与个人环境变量的配置文件     
  • 那么在Linux中,这些变量存在哪里呢?为什么用户一登陆shell就有了这些变量
  • /etc/profile  预设了几个重要的变量,PATH,USER,LOGNAME,MAIL,INPUTRC,HOSTNAME,HISTSIZE,umask等
  • /ect/bashrc    主要预设umask以及PS1。这个PS1就是我们输入命令时,前面的那串字符
  • [root@Shell ~]# echo $PS1            <==输出 $PS1
  • [\u@\h \W]\$
  • 其中,\u指用户,\h指主机名,\W指的是当前目录,\$指的是字符 #(普通用户就是显示 $)
  • 每个用户的主目录下还有几个隐藏文件
  • .bash_profile 定义了用户的个人化路径与环境变量的文件名称,每个用户都可以使用该文件输入专属自己的shell信息
  • .bashrc    该文件包含专属自己的shell的bash信息,当登陆或每次打开新的shell时,该文件被读取,可以将自己的自定义的别名或者变量写入文件中
  • .bash_histry    该文件永远记录命令历史
  • .bash_logout    当退出shell,会执行该文件,可以将一些清理的工作放入到这个文件中

[第二章]Shell 变量

标签:

原文地址:http://www.cnblogs.com/vforbox/p/4766644.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!