Linux教程(20)-shell命令

2008-02-23 05:30:12来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

命令行

用户登录到Linux系统时,能够看到一个shell提示符,标识了命令行的开始。用户能够在提示符后面输入任何命令及参数。例如:

$ date

二 11 23 01:34:58 CST 1999

$

用户登录时,实际进入了shell,他遵循一定的语法将输入的命令加以解释并传给系统。命令行中输入的第一个字必须是个命令的名字,第二个字是命令的选项或参数,命令行中的每个字必须由空格或TAB隔开,格式如下:

$ Command Option Arguments

选项和参数

选项是包括一个或多个字母的代码,他前面有一个减号(减号是必要的,Linux用他来区别选项和参数),选项可用于改变命令执行的动作的类型。例如:

$ ls

motd passwd

$

这是没有选项的ls命令,可列出当前目录中任何文档,只列出各个文档的名字,而不显示其他更多的信息。

$ ls -l

total 2

-rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd

-rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd

$

加入-l选项,将会为每个文档列出一行信息,诸如数据大小和数据最后被修改的时间。

大多数命令都被设计为能够接纳参数。参数是在命令行中的选项之后键入的一个或多个单词,例如:

$ ls -l text

-rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd

-rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd

$

将显示text目录下的任何文档及其信息。

有些命令,如ls能够带参数,而有一些命令可能需要一些最小数目的参数。例如,cp命令至少需要两个参数,假如参数的数目和命令需要不符,shell将会给出出错信息。例如:

$ cp -i mydata newdata

注意:命令行中选项先于参数输入。

命令行特征

命令行实际上是能够编辑的一个文本缓冲区,在按回车之前,能够对输入的文本进行编辑。比如利用BACKSPACE键能够删除刚键入的字符,能够进行整行删除,还能够插入字符,使得用户在输入命令,尤其是复杂命令时,若出现键入错误,无须重新输入整个命令,只要利用编辑操作,即可改正错误。

利用上箭头能够重新显示刚执行的命令,利用这一功能能够重复执行以前执行过的命令,而无须重新键入该命令。

bash保存着以前键入过的命令的列表,这一列表被称为命令历史表。按动上箭头,便能够在命令行上逐次显示各条命令。同样,按动下箭头能够在命令列表中向下移动,这样能够将以前的各条命令显示在命令行上,用户能够修改并执行这些命令。这一特征将在10.4节中进行周详的论述。

在一个命令行中还能够置入多个命令,用分号将各个命令隔开。例如:

$ ls -F;cp -i mydata newdata

也能够在几个命令行中输入一个命令,用反斜杠将一个命令行持续到下一行。

$ cp –i \

mydata \

newdata 

上面的cp命令是在三行中输入的,开始的两行以反斜杠结束,把三行作为一个命令行。

shell中的特别字符

shell中除使用普通字符外,还能够使用一些具备特别含义和功能的特别字符。在使用他们时应注意其特别的含义和作用范围。下面分别对这些特别字符加以介绍。

通配符

通配符用于模式匹配,如文档名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号[ ]中的字符序列。用户能够在作为命令参数的文档名中包含这些通配符,构成一个所谓的“模式串”,在执行过程中进行模式匹配。

* 代表任何字符串(长度能够不等),例如:“f*”匹配以f打头的任意字符串。但应注意,文档名前的圆点(.)和路经名中的斜线(/)必须显式匹配。例如“*”不能匹配.file,而“.*”才能够匹配.file。

? 代表任何单个字符。

[ ] 代表指定的一个字符范围,只要文档名中[ ]位置处的字符在[ ]中指定的范围之内,那么这个文档名就和这个模式串匹配。方括号中的字符范围能够由直接给出的字符组成,也能够由表示限定范围的起始字符、终止字符及中间的连字符(-)组成。例如,f [a- d] 和f [abcd]的作用相同。Shell将把和命令行中指定的模式串相匹配的任何文档名都作为命令的参数,形成最终的命令,然后再执行这个命令。

下面我们给出表10-1说明这些通配符的具体含义。


























模式串

意 义

*

当前目录下任何文档的名称。

*Text*

当前目录下任何文档名中包含有Text的文档的名称。

[ab-dm]*

当前目录下任何以a、b、c、d、m开头的文档的名称。

[ab-dm]?

当前目录下任何以a、b、c、d、m开头且后面只跟有一个字符的文档的名称。

/usr/bin/??

目录/usr/bin下任何名称为两个字符的文档的名称。

特别需要注意的是,连字符“-”仅在方括号内有效,表示字符范围,如在方括号外面就成为普通字符了。而*和?只在方括号外面是通配符,若出现在方括号之内,他们也失去通配符的能力,成为普通字符了。例如,模式“- a[*?]abc”中只有一对方括号是通配符,*和?均为普通字符,因此,他匹配的字符串只能是- a*abc和- a?abc。

最后说明一下使用通配符时需要注意的一些问题。由于*、?和[ ]对于shell来说具备比较特别的意义,因此在正常的文档名中不应出现这些字符。特别是在目录名中不要出现他们,否则Shell匹配起来可能会无穷的递归下去。另外要注意的一点是:假如目录中没有和指定的模式串相匹配的文档名,那么Shell将使用此模式串本身作为参数传给有关命令。这可能就是命令中出现特别字符的原因所在。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Linux教程(21)-标准输入/输出和重定向

下一篇: Linux教程(19)-TurboLinux Shell