首页 百科知识 管道及命令组合

管道及命令组合

时间:2022-10-09 百科知识 版权反馈
【摘要】:当一个命令行中有多条命令时,各命令之间应使用分隔符分隔。命令行中的命令分隔符除“;”外,还有管道操作符及后台执行符等,下面将介绍相关内容。利用管道操作符将一系列命令连接起来就构成了管道线。而命令的执行顺序也会随分隔符的不同而不同。可以使用的命令分隔符如表10-2所示。上述命令分隔符具有不同的优先级,“;”、“|”和“&”具有相同的优先级,但它们的优先级低于“&&”和“||”,后两者优先级相同。

10.2.3 管道及命令组合

当一个命令行中有多条命令时,各命令之间应使用分隔符分隔。命令行中的命令分隔符除“;”外,还有管道操作符及后台执行符等,下面将介绍相关内容。

(1)管道

管道把一个命令的输出传递给另一个命令作为输入。管道操作符使用竖杠“|”表示。其语法格式为:

命令1 | 命令2

管道将命令1的输出作为命令2的输入,例如,为了查询系统中登录的用户数目,可以使用下述命令:

$who | wc –l

该命令行的功能等价于下述命令序列:

$who 〉 tempfile

$wc –l 〈tempfile

$rm tempfile

利用管道操作符将一系列命令连接起来就构成了管道线。管道线中的每条命令都作为一个单独的进程执行,每条命令的输出作为后一条命令的输入。

(2)命令执行次序

当多条命令出现在一个命令行中时,应使用分隔符来分隔各条命令。而命令的执行顺序也会随分隔符的不同而不同。可以使用的命令分隔符如表10-2所示。

表10-2 命令分隔符

img76

上述命令分隔符具有不同的优先级,“;”、“|”和“&”具有相同的优先级,但它们的优先级低于“&&”和“||”,后两者优先级相同。当优先级相同时,按照从左到右的顺序执行命令。

例如,命令分隔符“;”放在一个命令行上的两个命令之间,对于下述命令行:

$date ; pwd

系统先执行命令date,然后执行命令pwd。

后台执行符“&”放在需要在后台执行的命令末尾,例如:

$cat temp 〉〉 file &

使用&&的一般形式为:命令1 && 命令2,例如,下述命令行如果成功地把文件f1拷贝到文件f2中,则把f1删除;否则不执行删除命令:

$cp f1 f2 && rm f1

使用||的一般形式为:命令1 || 命令2,例如,下述命令如果不能将文件abc的内容列出来,则显示当前工作目录的路径;否则不显示当前工作目录的路径:

$cat abc || pwd

(3)命令组合

在Shell中有两种方式可以将若干命令组合在一起,使其在逻辑上被视为一条命令。其实现方法是使用花括号{ }或者圆括号( )将一组命令括起来。这两种命令组合的执行过程相同,但是存在重要区别:使用花括号括起命令组时,命令组在本Shell内执行,不产生新的进程;而用圆括号括起命令组时,要建立新的子进程来执行命令组,因此在圆括号内的命令不会改变父Shell的变量值及工作目录等。

以花括号括起来的全部命令可视为语法上的一条命令,系统根据命令出现的先后次序执行这组命令,它的一般使用形式为:

{ 命令l;命令2;… }

使用花括号时在格式上应注意左括号后面应有一个空格;右括号之前应有一个分号,例如:

{ cd mydir ; ls ; }

该命令执行完后,shell的当前目录已改为mydir。

成组命令也可以用圆括号括起来。它的一般使用形式为:

(命令l;命令2;…)

例如,

( cd mydir ; ls ; )

该命令执行完后,其父shell的当前目录没有改变。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈