Linux命令的执行顺序

说明:
在执行某个命令时,有时需要依赖于前一个命令是否执行成功,如你需要将某个文件先拷贝到另一个目录后,将其删除。此时依赖于拷贝成功后,方可将原文件删除这就要求我们能控制命令的执行顺序。 此次,我们主要讲解如下内容:
命令执行顺序控制:; 、 && 、 ||
命令组合:() 、{}

一、命令执行顺序控制
1、;
一般形式: 命令1 ; 命令2
说明:命令1与命令2没有逻辑关系。无论命令1是否执行成功,命令2都会执行
下面我们看一个例子:
date; dd if=/dev/zero of=/tmp/testfile bs=1k count=100;
该例子表示,显示当前时间,无论data是否执行成功,都新建100k大小的/tmp/testfile文件

2、&&
一般形式: 命令1 && 命令2
说明:只有当命令1执行成功,才执行命令2;否则不执行命令2
下面我们看一个例子:
cp -R ./dir ../ && rm -rf ./dir
该例子表示,将当前目录下的dir目录及其子目录全部拷贝到上一级目录,如果该命令被成功执行,dir目录将会被删除;否则不被删除

3、||
一般形式: 命令1 || 命令2
说明: 只有当命令1执行失败,才执行命令2;否则不执行命令2
下面我们看两个例子:
awk -F: ‘{print $1}’ /etc/passwd > a.txt || cut -d: -f1 /etc/passwd
该例子表示通过awk查看当前系统注册的用户,并写入到a.txt文件中;如果该命令执行失败,则通过cut查看系统注册的用户

备注:
可通过echo $? 查看上一个命令是否执行成功
命令执行成功,返回0
命令执行失败,返回1

二、组合命令
如果希望将几个命令结果在一起执行,shell提供了两种方法,即可以在当前shell,也可以在子shell中执行一组命令,如下:

1、()
一般形式:(命令1;命令2;命令3…)
说明:表示括起来的一组命令,在当前shell中做为一个整体执行
例子: ls a || (echo “error,file not found” ; touch b)
该例子表示查看当前目录下有没有a的文件,没有就输出error,file not found并创建b文件;a存在就不执行任何命令。

ls a || echo “error,file not found” ; touch a
如果去掉(),就会发现,不管a存不存在,b文件都会被创建。ls a || echo “error,file not found” ;这是一条命名,touch b是另一条命令

2、{}
一般形式: {命令1;命令2;命令3…}
说明:命令在相应的子shell中执行
例子,这个真没想到什么好例子。

备注:
我们很少单独使用(),{}通常与&&或||一起使用,可通过echo $$查看当前的shell ID号
重新开一个shell:输入bash即可
退出当前shell: 输入exit即可

发表评论

邮箱地址不会被公开。 必填项已用*标注