在执行某个命令时,有时需要依赖于前一个命令是否执行成功,如你需要将某个文件先拷贝到另一个目录后,将其删除。此时依赖于拷贝成功后,方可将原文件删除这就要求我们能控制命令的执行顺序。 此次,我们主要讲解如下内容:
◆ 命令执行顺序控制:&& 、 ||
◆ 命令组合:() 、{}
一、命令执行顺序控制
1、&&
◆ 一般形式: 命令1 && 命令2
◆ 说明:只有当命令1执行成功,才执行命令2;否则不执行命令2
◆ 下面我们看一个例子:
cp -R ./dir ../ && rm -rf ./dir
该例子表示,将当前目录下的dir目录及其子目录全部拷贝到上一级目录,如果该命令被成功执行,dir目录将会被删除;否则不被删除
2、||
◆ 一般形式: 命令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中做为一个整体执行
2、{}
◆ 一般形式: {命令1;命令2;命令3...}
◆ 说明:命令在相应的子shell中执行
例子: rm -rf aaa || (echo "error,file not found" ; mkdir aaa)
备注:
我们很少单独使用(),{}通常与&&或||一起使用,可通过echo $$查看当前的shell ID号
◆ 重新开一个shell:输入bash即可
◆ 退出当前shell: 输入exit即可