【shell编程】变量

2023-02-12  本文已影响0人  运维开发笔记

变量

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

环境变量

使用 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

注意

  1. 变量未设定之前是空的
  2. 等号两边不能有空格

查看变量

[api@kfxqtyglpt ~]$ echo $myname
nanhai13
[api@kfxqtyglpt ~]$ echo ${myname}
nanhai13

推荐使用${}方式

特殊情况处理

  1. 数据内容有空格

    用单引号或者双引号括起来

    或者用转移字符\把空格转义了

    [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
    
  2. 数据内容中引用其他变量

    用双引号括起。不能用单引号

    [api@kfxqtyglpt ~]$ hello="hi ${myname}"
    [api@kfxqtyglpt ~]$ echo $hello
    hi nanhai 15
    

    如果用单引号

    [api@kfxqtyglpt ~]$ hello='hi ${myname}'
    [api@kfxqtyglpt ~]$ echo $hello
    hi ${myname}
    

    可以看出单引号和双引号的区别了

  3. 数据内容中执行其他命令

    使用$()可以执行命令

    [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
上一篇 下一篇

猜你喜欢

热点阅读