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)name="proinsight"
2)echo $name #方法1
3)echo ${name} #方法2
4)echo "$name" #方法3
通常情况下方法1、2、3都可以。只是在一些特殊条件下,方法1无法处理
如何输出name值的同时加入abc后缀,既输出proinsightabc
1)echo $nameabc #错误,会把nameabc看成一个变量,并输入变量值。
2)echo ${name}abc #正确
当然,不要小瞧{},它还有很多高级的功能,在此先略过。
那么方法3有什么用途呢?看一下下面的代码(当name中的值为空时,输出”empty name”)
1if [ -z $name ]; then
2 echo "empty name"
3fi
猜测一下什么情况代码无法顺利执行。
嘿嘿,想到了吗?
当name=”a b”时,[ -z $name ]变成 [ -z a b ],这时-z后有两个参数,而-z只需要一个参数。这时shell解释器会报错:[: too many arguments 等类似的错误。
所以当在test命令(即[])这类条件判断语句时,最好采用第3种方法,这样无论变量的值是什么?在执行时会将值看成一个整体。
1if [ -z "$name" ]; then
2 echo "empty name"
变量的分类
本地变量: 本地变量在用户现在的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表示没有错误,其他任何值表明有错误
阅读(1045) | 评论(0) | 转发(0) |