四时宝库

程序员的知识宝库

【shell编程】变量(shell编程定义变量)

变量

又分为环境变量和自定义变量

环境变量

使用 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
复制代码

推荐使用${}方式

特殊情况处理

  1. 数据内容有空格
  2. 用单引号或者双引号括起来
  3. 或者用转移字符\把空格转义了
  4. [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 复制代码
  5. 数据内容中引用其他变量
  6. 用双引号括起。不能用单引号
  7. [api@kfxqtyglpt ~]$ hello="hi ${myname}" [api@kfxqtyglpt ~]$ echo $hello hi nanhai 15 复制代码
  8. 如果用单引号
  9. [api@kfxqtyglpt ~]$ hello='hi ${myname}' [api@kfxqtyglpt ~]$ echo $hello hi ${myname} 复制代码
  10. 可以看出单引号和双引号的区别了
  11. 数据内容中执行其他命令
  12. 使用$()可以执行命令
  13. [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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接