Linux Shell(一)——Shell变量
shell,linux shell,局部变量,继承,linux2016-08-11
在Linux中,变量分为环境变量 和 局部变量。
环境变量能被子进程继承,而局部变量只能在当前进程中使用。
并且,不论是环境变量还是局部变量,他们又都可以分为系统变量 和 自定义变量。系统变量是系统启动时自动创建的变量,往往为系统运行提供支持;而自定义变量是用户自己定义的。一般而言,系统变量全为大写,自定义变量全为小写。
系统提供了一些默认的环境变量,如下:
[root@iZ28st035lsZ ~]# PS1='[\u:\w]:'
[root:~]:
echo $$
环境变量相当于全局变量,它可以被子进程继承;而局部变量只能在当前shell中使用。那么,什么是子进程呢?
在一个bash中开启一个新的bash,那么原本的bash称为父进程,新的bash称为子进程。
子进程会继承父进程的所有环境变量,而父进程的局部变量只能在父进程中使用。
显示一个变量有两种方式,这两种方式等价:
echo $变量名
echo ${变量名}
变量的设置较为简单,如下所示:
变量名=变量值
但是,变量的设置具有较多的注意点!
myName='chai bo zhou'
或
myName="chai bo zhou"
但是,单引号和双引号包裹变量值有本质的区别:
若变量值中包含特殊字符,则按照特殊字符代表的含义输出,如:
username="username is $myName"
echo $username
则输出的结果为:username is chai bo zhou。
若改为单引号,则以一个字符串的形式输出:
username='username is $myName'
echo $username
则输出结果为:username is $myName。
currentPath="current path is : $(pwd)"
echo $currentPath
输出结果为:current path is : /root
unset 变量名
自定义变量相当于局部变量,只能在当前shell中使用;而环境变量相当于全局变量,可以在子shell中使用。
env是environment的缩写,代表的就是环境变量的意思。他会把系统中所有的环境变量都数出来,如下所示:
[root@iZ28st035lsZ ~]# env
TERM=xterm-256color
SHELL=/bin/bash
CATALINA_HOME=/usr/tomcat
SSH_CLIENT=218.94.83.132 55624 22
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=
MAIL=/var/spool/mail/root
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/tomcat/tomcat:/usr/web2/tomcat:/usr/tomcat:/usr/jdk/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
set命令可以查看到所有的环境变量 和 自定义的变量。
export和env都会输出所有的环境变量,但export还会输出环境变量的类型:
[root:~]:export
declare -x CATALINA_HOME="/usr/tomcat"
declare -x CATALINA_HOME2="/usr/web2/tomcat"
declare -x CATALINA_HOME3="/usr/local/tomcat/tomcat"
declare -x CLASSPATH=".:/usr/jdk/lib/dt.jar:/usr/jdk/lib/tools.jar"
declare -x CVS_RSH="ssh"
设置环境变量首先需要创建一个局部变量:
变量名=变量值
然后再通过export命令将该局部变量提升为环境变量:
export 变量名
read [-p 提示语] [-t 时间] 变量名
-p:后面加上提示语
-t:后加上秒数,表示等待用户输入的时间
用户输入之后的值会存储到变量名中。
Linux中的变量一共有5种类型,分别是:字符、整型、只读、环境变量。
declare -/+参数 变量名=变量值
-a:将变量变成数组类型
-i:将变量变成int型
-x:将变量变成环境变量型
-r:将变量变成只读型
+:表示取消操作,即:将变量还原成字符型。
之前介绍的unset命令是将变量删除,而接下来介绍的命令是对变量内容的删除或替换。
操作方式 | 说明 |
---|---|
${变量名#关键词} | 从变量值的头部开始,依次向后删除到关键词第一次出现的位置为止 |
${变量名##关键词} | 从变量值的头部开始,依次向后删除到关键词最后一次出现的位置为止 |
${变量名%关键词} | 从变量值的尾部开始,依次向前删除到关键词第一次出现的位置为止 |
${变量名%%关键词} | 从变量值的尾部开始,依次向前删除到关键词最后一次出现的位置为止 |
${变量名/旧字符串/新字符串} | 从变量值的头部开始,依次向后找到第一个旧字符串,并将其替换 |
${变量名//旧字符串/新字符串} | 将变量值中所有的旧字符串替换成新字符串 |