http://blog./uid-223060-id-2215310.html
2010
shell变量没有类型之分,变量类型只是文本字符,系统是不会自动识别成其它类型的(如数字、布尔)。 与其它语言一样,在shell中用户定义的变量必须有字母数字和下划线组成,并且第一个字符不能为数字,且变量对大小写敏感。
变量的赋值
格式: NAME=value
注意等号两边不能有空格。
1
name=proinsight
# 正确 方法1
2
name = proinsight
# 错误,不能有空格
3
name=
"proinsight"
# 正确 方法2
4
name=
'proinsight'
# 正确 方法3
上面的例子中有三种赋值,那么它们之间的区别是什么呢?
如果传入的值中不包含空格等分割符, 采用方法1,2,3。 如果传入的值中包含空格等分割符,采用方法2,3。 如果传入的值包含其它变量,采用方法2。
如何将hello world 赋值给sentence变量:
1
sentence=
"hello world"
# 正确
2
sentence=
'hello world'
# 正确
3
sentence=hello world
# 错误
假设有一变量name存入一人名, 如何对这个人打招呼呢? 。
1
sentence=
"hi, $name"
#正确,sentence值为: hi, proinsight
2
sentence=
'hi, $name'
#错误,sentence值为: hi, $name
小结:” “(双引号) 与 ‘ ‘(单引号) 的区别
在双引号中,变量名称将被变量值所替代。 在单引号中,变量名称,或者任何其他文本都会不经修改而传出来。
变量的调用
在变量前加$,同样,变量的调用也有三种方法
通常情况下方法1、2、3都可以。只是在一些特殊条件下,方法1无法处理 如何输出name值的同时加入abc后缀,既输出proinsightabc
1
echo
$nameabc
#错误,会把nameabc看成一个变量,并输入变量值。
当然,不要小瞧{},它还有很多高级的功能,在此先略过。 那么方法3有什么用途呢?看一下下面的代码(当name中的值为空时,输出”empty name”):
猜测一下什么情况代码无法顺利执行。
嘿嘿,想到了吗? 当name=”a b”时,[ -z $name ]变成 [ -z a b ],这时-z后有两个参数,而-z只需要一个参数。这时shell解释器会报错:[: too many arguments 等类似的错误。 所以当在test命令(即[])这类条件判断语句时,最好采用第3种方法,这样无论变量的值是什么?在执行时会将值看成一个整体。
1
if
[ -z
"$name"
];
then
变量的分类
本地变量 : 本地变量在用户现在的shell生命期的脚本中使用,也常叫用户变量,上面几个例子中的变量都为本地变量
环境变量 :环境变量用于所有用户进程, 环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.profile等登入配置文件中定义。 常用环境变量有: 1. HOME: 用户目录的全路径名 2. PATH: shell从中查找命令的目录列表 3. IFS: 用作shell指定的缺省域分隔符 4. LOGNAME: 用户登录名 5. MAIL: 邮箱路径名
位置变量 : 如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问。 如果向脚本传送Welcome to script’s world: 下面表格讲解了如何访问每一个参数 $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 脚本名 Welcome to script’s world
特定变量 : 提供脚本运行时的一些相关控制信息 共有7个特定变量, $# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的进程ID号 $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数 $- 显示shell使用的当前选项,与set命令功能相同 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
原创文章,如转载,请注明:转载自脚本学习 [ http://www. ]