专注于 JAVA WEB开发
« »
2009/12/10IT技术

390 views

shell并发脚本和合并文件命令

本文[via]适合于bash、tcsh和zsh。 1、NEWLINE和“;”:分离命令 换行符NEWLINE是一个独特的命令,因为所有的命令处理都是从它开始的。任何一个命令行末尾都要按回车键。 分号“;”也是一个命令分离器。不过它不能开始执行命令,也不会改变任何函数的状态。在命令行上用分号分开每一个命令,就可以按顺序去执行这些命令了。在这命令行的末尾按下回车键,命令就会被执行:

1. $ x ; y; z

如果x、y和z是命令,上面的命令行就等同于下面的3个命令;不同之处在于,shell会在每下面每个命令后(x、y和z)都给出一个提示,而上面的命令行只有在z完成后才给出一个提示:

1. $ x
2. $ y
3. $ z

2、“”:继续执行命令 当用户输入一个很长的命令,并且光标到了屏幕或窗口最右端时,可以用反斜杠符号()在下一行继续用户的命令。

1. $ c
2. m
3. d

相当于输入一个完整的命令cmd。 3、“|”和“&”:分离命令并执行其他任务。 命令分离符有管道符号(|)和后台任务符号(&)。这两个命令分离符不会开始执行一个命令,但是它们能改变函数的一些方面。管道符号可以改变标准输入的代码,也可以改变标准输出的目的地址。后台任务符通知shell在后台执行任务,所以用户立刻就能回到shell提示符,继续执行其他任务。例如,一个包含3个任务的作业:

1. $ x | y | z

shell把任务x的输出定向到任务y,并把y的输出定向给z。因为shell在前台运行整个作业,所以z完成前,不会有提示符返回。任务x不完成,任务y不会完成;任务y不完成,任务z也不会完成。 下一个命令是在后台执行任务a和b,在前台执行任务c:

1. a & b & c
2. [1] 14271
3. [2] 14272

shell 显示出每个后台运行进程的作业号(即上面的“[1]”和“[2]”)和PID(即上面的“14271”和“14272”)。任务c一完成用户就会回到提示符。在给出新任务的提示符($)前,shell会检查后台作业是否都已完成。对每个已经完成的作业,shell将显示出它的作业号、单词Done和所调用该作业的命令行,然后shell会显示出提示符。列举作业号的时候,最前的作业后会跟一个减号(-),最后的作业号后面会跟一个加号(+)。其他作业跟一个空格。最后一个命令运行后,shell在显示提示符前会显示下列内容:

1. [1]- Done a
2. [2]+ Done b

下面的命令在后台执行全部三个任务,用户可以立刻回到shell提示符:

1. $ a & b & c &
2. [1] 14290
3. [2] 14291
4. [3] 14293

用户可以用管道符(|)来传送一个任务的输出到下一个任务,后台任务符(&)号会把这个过程作为后台作业运行。当然,提示符也能立刻返回。 shell把管道连接的命令看成一个单一的作业,不管管道连接了多少任务,也不管任务有多复杂。tcsh会显示3个进程(但是都属于一个作业)。bash 和zsh只显示一个进程。 4、“()”:组合命令可以用括号组合命令。对每一个组,shell创建一个称为子shell(subshell)的自身副本来处理每个命令组,并创建一个新进程处理每个命令。每个子shell(作业)都有自己的环境,也就是说有自己的一套已赋值的变量,这些变量可能和其他的子shell的环境不同。下面的命令行在后台依次执行a和b,同时在后台执行c,shell提示符会立刻返回:

1. $ (a;b) & c &
2. 15007

这个例子和前面提到的a & b & c & 有所不同,因为a和b是依次而非并发执行的。 与之类似,下面的命令行在后台依次执行a和b,同时,在后台也依次执行c和d。前一个子shell运行a和b,后一个子shell运行c和d,二者是并发进行的,并且shell提示符会立刻返回:

1. $ (a;b) & (c;d) &
2. 15020
3. 15021
4. $

示例

    #!/bin/bash
    ./run.sh & ./run1.sh & ./run2.sh & ./run3.sh & ./run4.sh &

合并文件

    #!/bin/bash
    cat change-*.sql > change.sql;

上面的命令是将以change-开头的sql文件合并输出到change.sql

日志信息 »

该日志于2009-12-10 12:55由 tj4c 发表在IT技术分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

相关日志 »

Related Posts

没有评论

发表评论 »

返回顶部