变量类别
Shell中的变量分为环境变量、位置变量、预定义变量和自定义变量四种。
环境变量
Shell环境变量是一类Shell预定义变量,用于设置系统、脚本运行时环境的变量,由系统统一命名;环境变量的值一部分由系统设定,另一部分可由用户自己定义。环境变量的名称由大写字母组成。常用的环境变量有:
m@sys:~$ cd /home/
m@sys:/home$
首先是用户名m,@分隔后是主机名sys,‘:’分隔后面是当前目录,紧接着就是主命令提示符‘
m@sys:/home$ su root
密码:
root@sys:/home#
PS2:辅助提示符,默认的是‘>‘。这个辅助提示符在需要将命令分解成几行时出现,只需要在行尾输入‘\’,那么按下回车后并不执行命令,而是在下一行继续输入,如下:
root@sys:/home# ls | grep \
> ‘m‘
m
root@sys:/home#
LOGNAME:当前登陆的用户名。
用env或set目录可以显示以及设置环境变量。
自定义变量
m@meng:~$ var=10
m@meng:~$ echo This is the $varth room.
This is the room.
m@meng:~$ echo This is the ${var}th room.
This is the 10th room.
本意是想显示10th,结果可能把$varth当成了一个新变量,然而这个变量还没有定义,所以是空字符串。加上界定符之后,正常。
变量类型
Shell默认变量的类型是字符串,也就是说,所有赋给变量的值都被视为字符串。而且shell没有内置的算术运算,即+-*/等符号同样被视为普通字符,这与C语言是不同的。例如:
m@meng:~$ b=2+3
m@meng:~$ echo $b
2+3
但是通过declare命令可以给一个变量设定类型,目前只支持整型、数组型。现在考虑整型,declare -i a 命令将变量a的类型设置为整型,这样给a赋值的算术表达式将不再被视为普通字符串,而是真正的数字,而a也可以参加算术运算,如下:
m@meng:~$ a=2+3
m@meng:~$ echo $a
5
m@meng:~$ a=$a+$b
m@meng:~$ echo $a
10
显然$b的2+3也被视为数字了。当然,做算术运算不止这一种方法,let命令和expr命令也能达到目的,以后会介绍。
这里重点要说的是,变量的值被默认为字符串带来了一个麻烦:有时候我们需要将一个命令的输出结果赋值给变量,比如将date命令的结果赋值给NOW变量,直接的办法就是:
m@meng:~$ NOW=date
m@meng:~$ echo $NOW
date
着并没有达到我们想要的结果,因为date被视为了普通字符串。所以shell引入了一种机制来避免这种情况,那就是反引号:
m@meng:~$ NOW=`date`
m@meng:~$ echo $NOW
2015年 06月 22日 星期一 12:26:53 CST
将命令置于反引号中,那么命令将不再是普通字符串,而是一个真正的命令,它会产生输出,但是不是显示到标准输出上,而是重定向到变量中。
原文:http://blog.csdn.net/u012668018/article/details/45726519