我们可能会遇到这样的情况:有多个程序需要在同一个终端由一条命令来执行。最常用的方法便是编写 Shell 脚本来同时执行多个程序,另外一种便是这里将要介绍的多命令执行操作符。
一、多命令执行之 ;
要在同一终端运行多个程序,程序是否运行与其他程序的运行结果无关,只需要程序依次执行,前面的程序执行完之后方才执行后面的程序。对于这种情况,我们最好采用多命令执行操作符“;”。命令与命令之间用分号“;”隔开,这样,分号前面的程序执行完毕之后就会紧接着执行分号后面的程序,直到所有程序执行完毕。我们来看一下下面这个实例:
trevor@trevor-PC:~/linux/linux100$ ls 06 trevor@trevor-PC:~/linux/linux100$ mkdir dir;ls -l;rm dir -r;touch file;ls -l 总用量 8 drwxr-xr-x 3 trevor trevor 4096 2012-01-09 17:27 06 drwxr-xr-x 2 trevor trevor 4096 2012-02-27 21:13 dir 总用量 4 drwxr-xr-x 3 trevor trevor 4096 2012-01-09 17:27 06 -rw-r--r-- 1 trevor trevor 0 2012-02-27 21:13 file trevor@trevor-PC:~/linux/linux100$
由实例可知,当前目录开始只有一个名为 06 的目录,紧接着一行五个命令先后执行,首先创建 dir 目录,然后执行“ls -l”命令查看当前目录下的文件,接着执行 rm 命令删除 dir 目录,再执行 touch 命令创建一个 file 空文件,最后再次执行“ls -l”查看当前目录下的文件详情。
二、多命令执行之 &&
倘若有多个命令,我们希望只有在前面命令运行成功的情况下方才运行后面的命令,则需要用到多命令操作符“&&”。命令与命令之间用分隔符“&&”隔开,这样,如果前面的命令执行正确,则紧接着执行后面的程序;如果前面的程序执行失败了,则后面的程序将不再被执行。可以用到多命令操作符“&&”的情形很多,比如我们想使用 touch 命令更新 file 文件的修改时间,但是不确定 file 文件是否存在,不想因为 file 不存在而创建一个空文件,故可以使用 ls 命令确保 file 文件已经存在的前提下,再执行 touch 命令更新它的修改时间。见如下实例:
trevor@trevor-PC:~/linux/linux100$ ls -l 总用量 4 drwxr-xr-x 3 trevor trevor 4096 2012-01-09 17:27 06 -rw-r--r-- 1 trevor trevor 0 2012-02-27 21:13 file trevor@trevor-PC:~/linux/linux100$ ls file && touch file file trevor@trevor-PC:~/linux/linux100$ ls -l 总用量 4 drwxr-xr-x 3 trevor trevor 4096 2012-01-09 17:27 06 -rw-r--r-- 1 trevor trevor 0 2012-02-27 22:03 file trevor@trevor-PC:~/linux/linux100$ rm file trevor@trevor-PC:~/linux/linux100$ ls file && touch file ls: 无法访问file: 没有那个文件或目录 trevor@trevor-PC:~/linux/linux100$ ls -l 总用量 4 drwxr-xr-x 3 trevor trevor 4096 2012-01-09 17:27 06 trevor@trevor-PC:~/linux/linux100$
上面实例中,开始的时候存在 file 文件,且得知它的修改时间为 2012-02-27 21:13 ,执行多命令“ls file && touch file”之后,它的修改时间更新为 2012-02-27 22:03 ,随后删除 file 文件,再次执行多命令“ls file && touch file”,因为执行“ls file”命令的时候没找到文件而出错,故不再执行后面的 touch 命令,后面的 ls 也验证了我们的结论。
三、多命令执行之 ||
倘若有多个命令,我们希望只有在前面命令运行失败的情况下方才运行后面的命令,则需要用到多命令操作符“||”。命令与命令之间用分隔符“||”隔开,如果前面的命令执行失败,则紧接着执行后面的程序;如果前面的程序执行成功了,则后面的程序将不再被执行。这跟多命令执行符“&&”的功能正好相反,用到它的的情形也很多,比如我们想创建一个 dir 目录,但不确定该目录是否已经存在,在所以我们考虑在创建这个目录之前先检测一下该目录是否已经存在。见如下实例:
trevor@trevor-PC:~/linux/linux100$ ls 06 dir trevor@trevor-PC:~/linux/linux100$ mkdir dir mkdir: 无法创建目录"dir": 文件已存在 trevor@trevor-PC:~/linux/linux100$ ls dir || mkdir dir trevor@trevor-PC:~/linux/linux100$ rm dir/ -r trevor@trevor-PC:~/linux/linux100$ ls 06 trevor@trevor-PC:~/linux/linux100$ ls dir || mkdir dir ls: 无法访问dir: 没有那个文件或目录 trevor@trevor-PC:~/linux/linux100$ ls 06 dir trevor@trevor-PC:~/linux/linux100$
在上面实例中,当前目录下已经存在 dir 目录,这时候创建 dir 命令会提示错误;随后执行多命令“ls dir || mkdir dir”,没有再提示错误,这是因为“ls dir”执行成功,则后面的命令“mkdir dir”命令将不再执行,故没有提示“文件已经存在的错误”;接着我们删掉 dir 目录,再次执行多命令“ls dir || mkdir dir”,这时候提示“无法访问dir”错误,说明“ls dir”命令执行失败;最后执行 ls 命令,我们看到 dir 目录又出现了,这说明“mdkir dir”命令被执行了,这也就很好地验证了我们的结论。
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。