变量
又分为环境变量和自定义变量
环境变量
使用 env
命令查看
[api@kfxqtyglpt ~]$ env
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.190.179.212 60463 50023
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/1
HISTORY_FILE=/var/log/usermonitor/usermonitor.log
JRE_HOME=/home/api/jdk1.7.0_25/jre
USER=api
MAVEN_HOME=/home/api/maven
MAIL=/var/spool/mail/api
PATH=/home/api/jdk1.7.0_25/bin:/home/api/maven/bin:/home/api/maven/bin:/home/api/jdk1.7.0_25/bin:/home/api/jdk1.7.0_25/jre/bin:/usr/local/nginx/sbin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/api/bin
JAVA_HOME=/home/api/jdk1.7.0_25
LANG=zh_CN.UTF-8
环境变量通常用全大写的形式
自定义变量
[api@kfxqtyglpt ~]$ myname=nanhai13
注意
- 变量未设定之前是空的
- 等号两边不能有空格
查看变量
[api@kfxqtyglpt ~]$ echo $myname
nanhai13
[api@kfxqtyglpt ~]$ echo ${myname}
nanhai13
推荐使用${}方式
特殊情况处理
-
数据内容有空格
用单引号或者双引号括起来
或者用转移字符\把空格转义了
[api@kfxqtyglpt ~]$ myname="nanhai 13" [api@kfxqtyglpt ~]$ echo ${myname} nanhai 13 [api@kfxqtyglpt ~]$ myname='nanhai 14' [api@kfxqtyglpt ~]$ echo ${myname} nanhai 14 [api@kfxqtyglpt ~]$ myname=nanhai\ 15 [api@kfxqtyglpt ~]$ echo ${myname} nanhai 15
-
数据内容中引用其他变量
用双引号括起。不能用单引号
[api@kfxqtyglpt ~]$ hello="hi ${myname}" [api@kfxqtyglpt ~]$ echo $hello hi nanhai 15
如果用单引号
[api@kfxqtyglpt ~]$ hello='hi ${myname}' [api@kfxqtyglpt ~]$ echo $hello hi ${myname}
可以看出单引号和双引号的区别了
-
数据内容中执行其他命令
使用$()可以执行命令
[api@kfxqtyglpt ~]$ myversion=$(uname -r) [api@kfxqtyglpt ~]$ echo $myversion 2.6.32-431.el6.x86_64
查看自定义变量
使用set命令。可以查看所有环境变量和自定义变量
删除自定义变量
unset命令
其他
$本身也是个变量
[api@kfxqtyglpt ~]$ echo $$
74292
$$显示当前shell的pid
?是上一个命令的结果
一般命令执行后都会回传一个执行结果。
执行成功一般回传0,如果执行出错,会回传错误码。
[api@kfxqtyglpt ~]$ echo $?
0
[api@kfxqtyglpt ~]$ name=66 66
-bash: 66: command not found
[api@kfxqtyglpt ~]$ echo $?
127
将自定义变量导出为环境变量
使用export命令,注意没有$符号
[api@kfxqtyglpt ~]$ export myname
使用env查看
[api@kfxqtyglpt ~]$ env
...
myname=nanhai 15
...
我们登入linux,取得一个bash命令窗口,就是开启了一个bash程序,这个bash有自己的pid
在这个shell下执行的所有命令都是这个shell程序的子程序
子程序会继承父程序的环境变量,但是不会继承父程序的自定义变量
[api@kfxqtyglpt ~]$ name=superman
[api@kfxqtyglpt ~]$ echo $name
superman
[api@kfxqtyglpt ~]$ bash ========>开启一个bash子程序
[api@kfxqtyglpt ~]$ echo $name
[api@kfxqtyglpt ~]$ exit ========>返回父程序
exit
[api@kfxqtyglpt ~]$ export name ========>export成环境变量
[api@kfxqtyglpt ~]$ bash
[api@kfxqtyglpt ~]$ echo $name
superman
读取输入值
编写shell脚本时经常会用到需要获取用户输入的功能。这就需要read命令
[api@kfxqtyglpt ~]$ read name
king
[api@kfxqtyglpt ~]$ echo ${name}
king
[api@kfxqtyglpt ~]$ read -p "输入名字:" -t 10 name
输入名字:aaaaa
[api@kfxqtyglpt ~]$ echo $name
aaaaa
read直接加变量名即可
参数-p可以加说明,-t是等待时间
声明变量的类型
默认定义的变量都是字符串类型,所以
[api@kfxqtyglpt ~]$ sum=10+20
[api@kfxqtyglpt ~]$ echo ${sum}
10+20
声明变量类型使用declare命令,参数
-a数组类型
-i整数类型
-x导出为环境变量
-r只读类型
[api@kfxqtyglpt ~]$ unset sum
[api@kfxqtyglpt ~]$ declare -i sum
[api@kfxqtyglpt ~]$ sum=10+20
[api@kfxqtyglpt ~]$ echo $sum
30
数组
直接使用中括号来定义即可,使用时需要用${}
[api@kfxqtyglpt ~]$ arr[0]=aa
[api@kfxqtyglpt ~]$ arr[1]=bb
[api@kfxqtyglpt ~]$ arr[2]=cc
[api@kfxqtyglpt ~]$ echo "${arr[0]},${arr[2]}"
aa,cc
网友评论