0
点赞
收藏
分享

微信扫一扫

Shell 变量

一.系统环境变量

系统环境变量是系统提供的共享变量,是 linux 系统加载 Shell 的配置文件中定义的变 量共享给所有的 Shell 程序使用。

1.1.Shell 的配置文件分类

  1. 全局配置文件
/etc/profile 
/etc/profile.d/*.sh
/etc/bashrc
  1. 个人配置文件
当前用户/.bash_profile 
当前用户/.bashrc

一般情况下,我们都是直接针对全局配置进行操作。

1.2.环境变量的分类

在 Linux 系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级 环境变量。
系统级环境变量:Shell 环境加载全局配置文件中的变量共享给所有用户所有 Shell 程 序使用,全局共享。
用户级环境变量:Shell 环境加载个人配置文件中的变量共享当前用户的 Shell 程序使 用,登录用户使用。

1.3.查看当前 Shell 系统环境变量

env

[root@node0 ~]# env
HOSTNAME=node0
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.134.1 53003 22
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
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.134.1 53003 192.168.134.100 22
LESSOPEN=|/usr/bin/lesspipe.sh %s
G_BROKEN_FILENAMES=1
_=/bin/env
[root@node0 ~]#

1.4.查看所有变量

set

[root@node0 ~]# 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]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-release'
COLORS=/etc/DIR_COLORS
COLUMNS=171
DIRSTACK=()
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=node0
HOSTTYPE=x86_64
ID=0
IFS=$' \t\n'
LANG=en_US.UTF-8
LESSOPEN='|/usr/bin/lesspipe.sh %s'
LINES=32
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=x86_64-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=1117
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/root
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_CLIENT='192.168.134.1 53003 22'
SSH_CONNECTION='192.168.134.1 53003 192.168.134.100 22'
SSH_TTY=/dev/pts/0
TERM=xterm
UID=0
USER=root
_=env
colors=/etc/DIR_COLORS
[root@node0 ~]#

1.5.常用系统环境变量

  1. PATH 与 windows 环境变量 PATH 功能一样,设置命令的搜索路径, 以冒号为分割
  2. HOME 当前用户目录:/root
  3. SHELL 当前 shell 解析器类型:/bin/bash
  4. HISTFILE 显示当前用户执行命令的历史列表文件:/root/.bash_history
  5. PWD 显示当前所在路径:/root
  6. OLDPWD 显示之前的路径
  7. HOSTNAME 显示当前主机名
  8. HOSTTYPE 显示主机的架构
  9. LANG 设置当前系统语言环境:zh_CN.UTF-8
    【示例】查看 PATH 环境变量
[root@node0 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@node0 ~]#

【示例】查看$HISTFILE 环境变量

[root@node0 ~]# echo $HISTFILE
/root/.bash_history
[root@node0 ~]#

二.自定义变量

2.1.自定义变量分类

  1. 自定义局部变量 2. 自定义常量 3. 自定义全局变量

三.自定义局部变量

就是在脚本或命令中定义,仅在当前 shell 实例中有效,其他 shell 启动的程序不能访 问局部变量。

3.1 变量定义规则

  1. 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  2. 中间不能有空格,可以使用下划线(_)。
  3. 不能使用 Shell 中的关键字作为变量名称。
  4. 在 bash 环境中,变量的默认类型都是字符串类型,无法直接进行数值运算。
  5. 变量的值如果有空格,必须使用双引号括起来。

3.2 定义变量语法

变量名=变量值
注意:等号两边不能有空格
【示例】定义局部变量

#!/bin/bash
a=10
b="yqq"
echo "a的值:$a"
echo "b的值:$b"

3.3 查看变量

查看变量的值方式:

#语法 1:直接使用变量名查询 
$var_name
#语法 2:使用花括号
${var_name}
#区别:花括号方式适合拼接字符串

3.4 删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量被删除后不能再次使用。unset 命令不能删除只读变量。
【示例】删除局部变量

[root@node0 ~]# echo ${a}123
hello world123
[root@node0 ~]# unset a
[root@node0 ~]# echo ${a}123
123
[root@node0 ~]# echo $a

四.自定义常量

变量设置值以后不可修改的变量叫常量,也叫只读变量。 使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
readonly variable_name

#!/bin/bash
age=23
age=32
readonly pi=3.14
pi=314
echo "age的值:$age"
echo "pi的值:$pi"
[root@node0 ~]# sh yqq.sh 
yqq.sh: line 5: pi: readonly variable

五.自定义全局变量

5.1 父子 Shell 环境介绍

例如:有 2 个 Shell 脚本文件 A.sh 和 B.sh 如果在 A.sh 脚本文件中执行了 B.sh 脚本文件,那么 A.sh 就是父 Shell 环境,B.sh 就 是子 Shell 环境。

5.2 自定义全局变量

就是在当前脚本文件中定义全局变量,这个全局变量可以在当前 Shell 环境与子 Shell 环境中都可以使用
语法:

export var_name1 var_name2

测试全局变量在子 Shell 中是否可用,在父 Shell 中是否可用
实现步骤::

  1. 创建 2 个脚本文件 A.sh 和 B.sh
  2. 编辑A.sh
#!/bin/bash
#定义全局变量
export a=100
#执行B.sh脚本文件
sh B.sh
  1. 编辑B.sh
#输出A.sh脚本文件全局变量a的值
echo "A.sh脚本文件中的全局变量a的值:$a"
  1. 执行
[root@node0 ~]# sh A.sh 
A.sh脚本文件中的全局变量a的值:100
[root@node0 ~]# sh B.sh
A.sh脚本文件中的全局变量a的值:
[root@node0 ~]# vim B.sh
[root@node0 ~]# sh A.sh
A.sh脚本文件中的全局变量a的值:100
[root@node0 ~]# sh A.sh
A.sh脚本文件中的全局变量a的值:100

.5.3 自定义系统环境变量

/etc/profile 定义存储自定义系统级环境变量数据,当前用户进入 Shell 环境初始化的 时候会加载全局配置文件/etc/profile 里面的环境变量,供给所有 Shell 程序使用,以后只 要是所有 Shell 程序或命令使用的变量,就可以定义在这个文件中。
创建环境变量步骤:

  1. 编辑/etc/profile 全局配置文件
  2. #增加命令:定义变量 VAR1=VAR1,并导出为环境变量
    注意:vim 直接打开全局配置文件是在配置文件的最顶端,使用 G 可以快速到文件底部, gg 重新回到文件的顶端
export neu=neusoft
  1. 重新加载配置文件/etc/profile,因为配置文件修改后要立刻加载里面的数据就需要 重新加载,语法:
[root@node0 ~]# source /etc/profile
[root@node0 ~]# echo $neu
neusoft


举报

相关推荐

0 条评论