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

Shell变量

2016-02-15 13:42 337 查看
变量是代表一些值的符号,可以通过变量来设置Shell或者其他程序,变量作用于内存中。

变量的查看

1. set可以查看所有的变量

[root@chen 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'
CLASSPATH=.:/usr/local/jdk1.8.0_65/lib/dt.jar:/usr/local/jdk1.8.0_65/lib/tool.jar:/usr/local/jdk1.8.0_65/jre/lib
COLORS=/etc/DIR_COLORS
COLUMNS=191
CVS_RSH=ssh
DIRSTACK=()
... ...
2. env只能查看所有的环境变量

[root@chen shell]# env
HOSTNAME=chen.morris
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.92.1 2090 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib/qt-3.3
OLDPWD=/root
QTINC=/usr/lib/qt-3.3/include
SSH_TTY=/dev/pts/0
JRE_HOME=/usr/local/jdk1.8.0_65/jre
USER=root
... ...


变量的设置

1. 通过自定义变量设置

[root@tbtravel ~]# key1="morris"
[root@tbtravel ~]# echo $key1
morris
2. 通过别名设置

[root@tbtravel ~]# alias taillog='tail -f /usr/www/logs/web.log'
[root@tbtravel ~]# alias | grep taillog
alias taillog='tail -f /usr/www/logs/web.log'
3. 通过set指令设置

4. 通过环境变量设置

vi /etc/profile 打开文件,在文件最后添加

export JAVA_HOME=/usr/local/jdk1.8.0_65
export JRE_HOME=/usr/local/jdk1.8.0_65/jre
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar:$JRE_HOME/lib
source /etc/profile 重新执行刚修改的初始或文件

变量的命名

变量名和等号之间不能有空格,变量名的命名须遵循如下规则:

1) 首个字符必须为字母(a-z,A-Z)。

2) 中间不能有空格,可以使用下划线(_)。

3) 不能使用标点符号。

4) 不能使用bash里的关键字(可用help命令查看保留关键字)。

变量的使用

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。

[root@tbtravel ~]# echo $key1
morris
[root@tbtravel ~]# echo ${key1}
morris
重新定义变量与定义变量一样,如果变量存在则会自动覆盖。

[root@tbtravel ~]# key1="java"
[root@tbtravel ~]# echo $key1
java
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变,当尝试改变只读变量的值时会报错。

[root@tbtravel ~]# readonly key1="morris"
[root@tbtravel ~]# echo $key1
morris
[root@tbtravel ~]# key1="java"
-bash: key1: readonly variable
使用unset删除变量,但是不能删除只读变量

[root@tbtravel ~]# key2="morris"
[root@tbtravel ~]# echo $key2
morris
[root@tbtravel ~]# unset key2
[root@tbtravel ~]# echo $key2
[root@tbtravel ~]# unset key1
-bash: unset: key1: cannot unset: readonly variable


变量的类型

运行shell时,会同时存在三种变量:

1) 局部变量

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

2) 环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

3) shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

常见的环境变量

环境变量含义
PATH指定命令的搜索路径
HISTSIZE保存历史命令记录的条数
LOGNAME当前用户的登录名
HOSTNAME主机的名称
SHELL当前用户用的是哪种Shell
LANG/LANGUGE和语言相关的环境变量,使用多种语言的用户可以修改此环境变量

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