一、普通变量
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
二、变量定义及变量输出说明
单引号、双引号、反引号与不加引号
单引号:
双引号:
无引号:
反引号: