计算机网络/计算机科学与应用/系统/运维/开发

三、普通变量

一、普通变量

1、 定义本地变量

(1)普通变量定义

  变量名=value       #<==赋值时不加引号

  变量名='value'     #<==赋值时加单引号

  变量名="value"     #<==赋值时加双引号

(2)在Shell中定义变量名及为变量内容赋值的要求

变量名一般是由字母、数字、下划线组成的,可以以字母或下划线开头

如:oldboy、oldboy123、oldboy_training

(3)普通变量的定义及输出的示例

[root@localhost ~]# a=192.168.1.2

[root@localhost ~]# b='192.168.1.2'

[root@localhost ~]# c="192.168.1.2"

[root@localhost ~]# echo "a=$a"

a=192.168.1.2

[root@localhost ~]# echo "b=$b"

b=192.168.1.2

[root@localhost ~]# echo "c=${c}"

c=192.168.1.2

注意: 

$变量名表示输出变量,可以用$c和${c}两种用法

(4)变量定义的基本技巧总结

数字内容的变量定义可以不加引号,其他没有特别要求的字符串等定义最好都加上双引号,如果真的需要原样输出就加单引号

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

变量名=`ls`         #<==把命令用反引号引起来,不推荐使用这种方法,因为容易和单引号混淆

        变量名=$(ls)       #<==把命令用$()括起来,推荐使用这种方法

[root@localhost shell]# cat test.sh 

#!/bin/bash

CMD=`ls`

echo $CMD

CMD1=$(pwd)

echo $CMD1

执行结果:

[root@localhost shell]# chmod +x test.sh 

[root@localhost shell]# ./test.sh 

test.sh

/root/shell

实例:按天打包网站的站点目录程序,生成不同的文件名

[root@oldboy scripts]# CMD=$(date +%F)  #<==将当前日期(格式为2016-09-10)赋值 给CMD变量

        [root@oldboy scripts]# echo $CMD                          #<==输出变量的值

        2016-09-10

        [root@oldboy scripts]# echo $(date +%F).tar.gz #<==直接输出时间命令的结果

        2016-09-10.tar.gz

        [root@oldboy scripts]# echo `date +%F`.tar.gz

        2016-09-10.tar.gz

        [root@oldboy scripts]# tar zcf etc_$(date +%F).tar.gz /etc

                                                          #<==将时间作为压缩包名打包

        tar: 从成员名中删除开头的“/”

        tar: 从硬连接目标中删除开头的“/”

        [root@oldboy  scripts]#  ls  -l  etc_2016-09-10.tar.gz    #<==打包结果,包名中包含

                                                                      有当前日期

        -rw-r--r-- 1 root root 9700163 9月  10 18:39 etc_2016-09-10.tar.gz

        [root@oldboy scripts]# H=$(uname -n)    #<==获取主机名并赋值给H变量

        [root@oldboy scripts]# echo $H

        oldboy

        [root@oldboy scripts]# tar zcf $H.tar.gz /etc/services    #<==将主机名作为压缩包名

                                                                      打包文件

        tar: 从成员名中删除开头的“/”

        [root@oldboy scripts]# ls -l oldboy.tar.gz        #<==打包结果,包名中包含有主机名

        -rw-r--r-- 1 root root 127303 9月  10 18:40 oldboy.tar.gz

(6)局部(普通)变量定义及赋值的经验小结

常规普通变量定义:

若变量内容为连续的数字或字符串,赋值时,变量内容两边可以不加引号,例如a=123

变量的内容很多时,如果有空格且希望解析内容中的变量,就加双引号,例如a="/etc/rc.local $USER" ,此时输出变量会对内容中的$USER进行解析然后再输出

希望原样输出变量中的内容时就用单引号引起内容进行赋值,例如:a='$USER'

要使用反引号将赋值的命令括起来,例如:a=`ls`;或者用$()括起来,例如:a=$(ls)

变量的输出方法:

使用“$变量名”即可输出变量的内容,常用“echo $变量名”的方式,也可用printf代替echo输出更复杂的格式内容

变量定义的技巧及注意事项:

注意命令变量内容前后的字符``(此字符为键盘Tab键上面的那个反引号,不是单引号),例如:CMD=`ls`

在变量名前加$可以取得该变量的值,使用echo或printf命令可以显示变量的值,$A和${A}的写法不同,但效果是一样的

用echo等命令输出变量的时候,也可用单引号、双引号、反引号,例如:echo$A、echo "$A"、echo '$A',它们的用法和前面变量内容定义的总结是一致的

$dbname_tname,当变量后面连接有其他字符的时候,必须给变量加上大括号{},例如:$dbname_tname就要改成${dbname}_tname


二、变量定义及变量输出说明 

单引号、双引号、反引号与不加引号

单引号:

双引号:

无引号:

反引号:


所有的努力,不是为了让别人觉得你了不起,而是为了能让自己打心眼里看得起自己。

评论

^