分类:
2010-08-18 12:42:13
shell变量没有类型之分,变量类型只是文本字符,系统是不会自动识别成其它类型的(如数字、布尔)。
变量的赋值
格式: NAME=value (注意等号两边不能有空格)
name=proinsight
# 正确 方法1
name = proinsight
# 错误,不能有空格
name=
"proinsight"
# 正确 方法2
name=
'proinsight'
# 正确 方法3
如果传入的值中不包含空格等分割符, 采用方法1,2,3。如果传入的值中包含空格等分割符,采用方法2,3。如果传入的值包含其它变量,采用方法2。
如何将hello world 赋值给sentence变量:
sentence=
"hello world"
# 正确
sentence=
'hello world'
# 正确
sentence=hello world
# 错误
sentence=
"hi, $name"
#正确,sentence值为: hi, proinsight
sentence=
'hi, $name'
#错误,sentence值为: hi, $name
小结:" "(双引号) 与 ' ' (单引号) 的区别
在变量前加$,同样,变量的调用也有三种方法
name=
"proinsight"
echo
$name
#方法1
echo
${name}
#方法2
echo
"$name"
#方法3
通常情况下方法1、2、3都可以。只是在一些特殊条件下,方法1无法处理
如何输出name值的同时加入abc后缀,既输出proinsightabc
echo
$nameabc
#错误,会把nameabc看成一个变量,并输入变量值。
echo
${name}abc
#正确
那么方法3有什么用途呢?看一下下面的代码(当name中的值为空时,输出"empty name"):
if
[ -z $name ];
then
echo
"empty name"
fi
猜测一下什么情况代码无法顺利执行。
嘿嘿,想到了吗?
当name="a b"时,[ -z $name ]变成 [ -z a b ],这时-z后有两个参数,而-z只需要一个参数。这时shell解释器会报错:[: too many arguments 等类似的错误。
所以当在test命令(即[])这类条件判断语句时,最好采用第3种方法,这样无论变量的值是什么?在执行时会将值看成一个整体。
if
[ -z
"$name"
];
then
echo
"empty name"
fi