Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103682447
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 22:54:29

 

第二章:Shell基础知识

一、     特殊符号

   Shell中有一些符号具有特殊的含义,可以用来实现某些功能,现叙述如下:

1、星号(*):可以匹配任何字符串,包括空串。如:echo  * 命令将显示当前目录下的所有文件和目录名,lf aa* 将显示所有以aa开头的文件名。使用 * 做匹配符时,应特别小心,如rm * 将删除目录下的所有文件。

2、问号(?):可以匹配文件名中的任何单个字符。如用lf a??d 命令来显示当前目录下的文件时,其结果可能为:abcdaacdaaad等。

3、中括号([]):可以匹配一个集合的元素。如果[crf]作为一个文件名模式的一部分,Shell将可以查到指定位置的字母为crf的文件名。例如:lf [crf]at 命令的结果可能为:catfatrat等。

中括号也能用于指定的一个字符域,无论是数字还是字母。如:lf chapter[1-9] 其结果将是可能存在的chapter1,chapter2...等文件名。

4、后台执行符号(&):如果一个程序运行的时间很长,并且不是一个交互式

程序的话,就可以用 & 号使程序以后台的形式执行。其格式为:command &

5、分号():可以让你在一个命令行或程序的一行中执行多个命令。例如:

#cdpwd

6、反斜杠(\):用于取消特殊字符的特殊含义。例如:lf aa\* 命令将查找

当前目录是否有名为aa*的文件,与lf aa* 命令的含义截然不同。

7、单引号(‘ ’):取消除单引号以外的任何字符的特殊含义。例如:echo

‘my name is $name’其结果为:my name is $name,此时$只作为一个普

  通字符使用了。

8、双引号(“ ” ):取消除双引号、$号以及_号以外的所有字符的特殊含

义。单引号更加具有强制性。

9、输入转向符(<):用于指定输入的设备或文件。如:mail root

则将文件message的内容发送给root

   10、输出转向符(>):用于将输出发送到指定的设备或文件中。如:lf>myfile

其结果是将lf的执行结果放到文件myfile(同时清空文件中原有的数

据),而不显示到屏幕上。又如:将错误输出到重定向到空设备 2>/dev/null

   11、追加符号(>>):用于将命令的输出追加到某个文件中。如:lf >>myfile

       其结果是将lf的执行结果追加到文件myfile(文件原有的数据予以保

       留),而不显示到屏幕上。

   12、管道符号(|):可以将一个命令的输出作为另一个命令的输入,而不需建

       立临时文件,以这样的方式建立的多命令行称为管道线。如:ls|more

       ls 的结果传递给more,more来分屏显示。

   13、改向符号(<<):常用于建立一个here文件。

   14&&||:其作用是使命令有条件的执行。如:

       command1 && command2:当且仅当command1执行成功后才执行command2

       command1 || command2:当且仅当command1执行失败后才执行command2

 

二、     变量

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程序

也会随之结束。

阅读(689) | 评论(0) | 转发(0) |
0

上一篇:SHELL编程基础(1)

下一篇:SHELL编程基础(3)

给主人留下些什么吧!~~