一、 变量
Shell的变量不分类型,或者说只有字符串型变量,所以要使用数值运算则必须靠外部命令达到目的。而其变量种类有以下几种:
1、用户自定义变量
在Shell中,这是最常用的变量,在程序中变量不需要事先说明,没有类型之分,也没有全程、局部的区别。变量可以随时随地定义,其名称是以字母开头的不包括空白字元的任何字符串,长度不限。其使用范围只限于程序运行期间,程序执行完毕,该变量即不复存在。
定义变量的格式: 变量名=字符串 (例:name=Tom)
其中,字符串可以是空串,表示变量被赋予空值。
引用一个变量时,在变量前加一$号即可。
Name=Tom (变量name被赋予字符串值Tom)
echo $name (显示变量name的值)
执行结果为:Tom
2、系统变量(环境变量)
和自定义变量相似,系统变量只不过是在用户注册到系统的时候,由
系统自动赋值的,并且它的值会自动传递到各层Shell并能够被其所执行的
程序所调用。除非在程序中对环境变量进行修改,否则其值不会随Shell
程序的运行而改变,要将一个用户自定义变量设定为环境变量,只需用
export命令声名即可,例如:
name=Tom
export name
以下是用户一进入系统之后就已设定好的环境变量:
$HOME:用户自己的主目录
$PATH:执行命令时所搜寻的目录
$TZ :时区
$PS1:命令行上的提示符
$PS2:当命令尚未书完时,Shell要求继续输入时的提示符
3、特殊变量
有些变量一开始执行Shell程序时就被自动设定的,一般不能进行修改,以下是一些特殊变量:
$0 Shell程序的执行名
$n Shell程序(或过程)的第n个位置参数值,n=1..9
$* Shell程序所有位置参数组成的字符串
$# Shell程序的位置参数的个数
$$ 程序执行后的进程号
$! 最后一个后台指令(程序)执行后的进程号
$? 命令执行后的返回值,返回0表示成功,返回1表示失败
其中,$n又叫位置变量,它是调用(运行)一个Shell程序时,跟在程序名后面的各个参数,最多可以有10个,例如:
#sh myprogram 15 20
则在程序中$1=15,$2=20
当你执行Shell时,如果参数的数目超过9个时,可以使用Shift命令将参数向前移动一格,如此便可以使用超过9个的参数。
输入输出语句
1、read语句
read语句用于从键盘接收一个或多个值并把它们赋予相应的变量。
用法:read变量名1 [变量名2,变量名3...]
例如:read a b
echo $a
echo $b
运行并输入aaa bbb回车后将显示:
aaa
bbb
需要注意的是,如一次需输入多个值,每个值之间要以空格来分隔,全
输入后再打回车确认。
如输入的字段值个数少于语句中变量的个数时,多出的变量将赋予空值。
如输入的字段值个数多于语句的变量个数时,多出的参数值被丢弃。
通常使用的方式是一次读入一个数据 ,即read后只跟一个变量。
2、echo语句
echo语句用于向标准输出设备输出字符串或变量的值。
用法:echo字符串 或 echo 变量名1[变量名2,变量名3...]
例如:echo I am a student
echo语句中还可以用一些控制字符对格式进行控制,常用如下:
\b 空一格,是显示行首为一个空格
\c 显示后不换行,下次显示时紧跟其后显示
\f 先清屏后在屏幕顶端显示
\n 换行,显示后多增加一空行
\r 回车
\t 显示时增加一个制表符
\v 垂直制表符
\\ 显示一个反斜杠
赋值语句
1、字符串:是最常用的赋值方法,等号后面跟一个后多个字符串。
如:name=John
name=”John Tom”
2、read语句:把键盘输入的值赋予变量。
如:read key (从键盘接收一个值并将其赋予变量key)
3、用命令的结果赋值:通过反单引号把某个命令的输出赋予变量。
如:name=`pwd`
4、用位置变量赋值:把命令行上的某一参数的值赋予变量。
如:name=$2 (把第二个位置参数的值赋予变量name)
执行命令
在Shell中执行一个命令有五种方法,具体如下叙述:
1、直接执行命令
在程序中通过调用命令名直接运行系统命令,如:lf这种方式和在命令
中直接下命令的效果一样,也是最常用的执行方式。
2、使用sh命令
在程序中通过sh command的形式运行其它Shell程序。这种方式除了这
个程序可不具有执行权限外和直接执行命令的形式一样。
3、使用”.”命令
在程序中以.command的形式运行命令(程序)。这时和使用sh命令相似,
只不过它不像sh一样会产生新的进程,相反,它会在原有的进程下完成。
4、使用exec命令
在程序中以exec command的形式运行命令(程序)。此时这个Shell程
序将会被所执行的命令所取代。当这个命令执行完毕之后,这个Shell程序
也会随之结束。