第2章 shell变量的核心基础

变量简介

变量的赋值方式:先写变量名称,然后“=”,最后是值,中间无任何空格

变量类型

变量可分为两类:环境变量(全局变量)和普通变量(局部变量)

环境变量

一般指用export内置命令导出的变量,用于定义shell的运行环境,保证shell命令的正确执行

shell通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等

按照系统规范,环境变量的名字均采用大写的形式

查看设置的变量:setenv

set命令输出所有的变量,包括全局变量和局部变量;

set -o命令只显示bash shell的所有参数配置信息

env命令只显示全局变量

自定义环境变量

1、设置环境变量

命令格式

1export 变量名 =value

2)变量名 =value ;export 变量名

3declare –x 变量名 =value

例子:

export NAME=wangxian
NAME=wangxian ;export NAME
declare –x NAME=oldboy

[

root@wangxian ~]# tail -1 /etc/profile
export WANG='xianwang'            #添加自定义变量
[root@wangxian ~]# source /etc/profile
[root@wangxian ~]# echo $WANG      #打印变量值
xianwang
[root@wangxian ~]# env|grep WANG       #查看定义结果
WANG=xianwang

1)用户的环境变量配置

[root@wangxian ~]# ls /root/.bashrc            #推荐在此文件中优先设置
/root/.bashrc
[root@wangxian ~]# ls /root/.bash_profile
/root/.bash_profile

2)全局环境变量的配置

/etc/profile
/etc/bashrc            #推荐在此文件中优先设置
/etc/profile.d/

2、设置登录提示的两种方式

1/etc/motd里增加提示字符

2)在/etc/profile.d/下面增加脚本

显示与取消环境变量

通过echoprintf打印环境变量

envprintenv)显示默认的环境变量

unset消除本地变量和环境变量

环境变量知识小结:

变量名通常要大写;

变量可以在自身的shell及子shell中使用

常用export来定义环境变量

执行env默认可以显示所有的环境变量名及对应的值

输出时用“$变量名,取消用“unset变量名

书写crond定时任务要注意,脚本要用到的环境变量最好先在所执行的shell脚本中重新定义;

若希望环境变量永久生效,可将其放在用户环境变量文件或全局环境变量文件里

普通变量

定义本地变量

本地变量在用户当前shell生存期的脚本中使用

1、普通变量定义

变量名=value

变量名=’value’

变量名=”value”

2、在shell中定义变量名及变量内容赋值的要求

变量名一般由字母、数字、下划线组成

3、示例:

[root@wangxian ~]# a=192.168.1.2
[root@wangxian ~]# b='192.168.1.2'
[root@wangxian ~]# c="192.168.1.2"
[root@wangxian ~]# echo "a=$a"
a=192.168.1.2
[root@wangxian ~]# echo "b=$b"
b=192.168.1.2
[root@wangxian ~]# echo "c=${c}"
c=192.168.1.2

4、变量定义的基本技巧总结:

1)不加引号,直接定义变量内容

2)单引号,输出变量内容时单引号里是什么就输出什么,即使内容中有变量和命令也会把它们原样输出

3)双引号,输出变量内容时引号的变量及命令会经过解析后再输出内容。

经验:数字内容的变量定义可以不加引号,其他没有特别要求的字符串等定义最好都加上双引号,如果真的需要原样输出就加单引号,定义变量加双引号是最常见的使用场景。

5、把一个命令的结果作为变量的内容赋值的方法

变量名=`ls`

变量名=$(ls)

PS:当变量后面连接有其他字符的时候,必须给变量加上大括号{}

例如:$wangxian_name就要改成${wangxian}_name

变量定义及变量输出说明

单引号、双引号、反引号与不加引号的知识说明

名称

解释

单引号

所见即所得,即输出时会将单引号内的所有内容都原样输出,或者描述为单引号里面看到的是什么就会输出什么;这称为强引用

双引号

输出双引号内的所有内容;如果内容中有命令、变量、特殊字符等,会先把变量、命令、转义字符解析出结果,然后再输出最终内容,推荐使用,称为弱引用

无引号

赋值时,如果变量内容中有空格,则会造成赋值不完整。而在输出内容时,会将含有空格的字符串视为一个整体来输出;如果内容中有命令、变量等,则会先把变量、命令解析出结果,然后输出最终内容;如果字符串中带有空格等特殊字符,则有可能无法完整的输出,因此需要改加双引号

反引号

一般用于引用命令,执行的时候命令会被执行,相当于$(),赋值和输出都要用``将命令引起来

建议:

在脚本中定义普通字符串变量时,应尽量把变量的内容用双引号括起来

单纯数字的变量内容可以不加引号

希望变量的内容原样输出时需要加单引号

希望变量值引用命令并获取命令的结果时就用反引号或$()

变量定义技巧总结

可以多学习操作系统自带的/etc/init.d/functions函数库脚本的定义思路

1)变量名及变量内容定义小结

1、变量名只能为字母、数字或下划线,只能以字母或下划线开头

2、变量名的定义要有一定的规范,并且要见名知意

3、一般的变量定义、赋值常用双引号;简单连续的字符串可以不加引号;希望原样输出时使用单引号

4、希望变量的内容是命令的解析结果时,要用反引号``,或者用$()

2shell定义变量时使用“=”的知识

“a=1”里等号是赋值的意思,比较变量是否相等时可以用“=”“==”

3)打印输出及使用变量的知识

打印输出或使用变量时,变量名前要接$符号,变量名后紧接其他字符的时候要用{}将变量名单独括起来。unsetexport等不加$

打印输出或使用变量时,一般加双引号或不加引号;如果是字符串变量,最好加双引号;原样输出时加单引号。


猜你喜欢

转载自blog.51cto.com/zaizheni/2351204