变量简介
变量的赋值方式:先写变量名称,然后“=”,最后是值,中间无任何空格
变量类型
变量可分为两类:环境变量(全局变量)和普通变量(局部变量)
环境变量
一般指用export内置命令导出的变量,用于定义shell的运行环境,保证shell命令的正确执行
shell通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等
按照系统规范,环境变量的名字均采用大写的形式
查看设置的变量:set、env
set命令输出所有的变量,包括全局变量和局部变量;
set -o命令只显示bash shell的所有参数配置信息
env命令只显示全局变量
自定义环境变量
1、设置环境变量
命令格式
1)export 变量名 =value
2)变量名 =value ;export 变量名
3)declare –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/下面增加脚本
显示与取消环境变量
通过echo或printf打印环境变量
用env(printenv)显示默认的环境变量
用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、希望变量的内容是命令的解析结果时,要用反引号``,或者用$()
2)shell定义变量时使用“=”的知识
“a=1”里等号是赋值的意思,比较变量是否相等时可以用“=”或“==”
3)打印输出及使用变量的知识
打印输出或使用变量时,变量名前要接$符号,变量名后紧接其他字符的时候要用{}将变量名单独括起来。unset、export等不加$。
打印输出或使用变量时,一般加双引号或不加引号;如果是字符串变量,最好加双引号;原样输出时加单引号。