在命令行中,使用控制运算符为复合命令添加逻辑。经常使用一些简单的复合指令,例如在一个命令行中连接多个命令。这些命令由分号分隔,分号表示命令结束。要在命令行上创建一系列简单的shell命令,只需用分号分隔每个命令,如下所示:command1;命令2;命令3;command4;***不需要加分号,因为当你按下回车键的时候,就意味着一个命令的结束,但是为了和其他的保持一致,还是建议加分号。所有命令都可以正常工作——只要没有意外发生。但是当出现问题时到底发生了什么?我们可以使用Bash的内置&&和||来预测和跟踪这些错误运营商。这两个控制运算符提供了一些流控制,并允许我们更改代码在队列中执行的顺序。分号和换行符在Bash中也被视为控制运算符。&&运算符的含义只是表示“如果command1成功,则执行command2”。如果command1由于任何原因失败,则command2将不会执行。语法看起来像这样:command1&&command2是允许的,因为每个命令都会向shell返回一个值(RC),以指示命令在执行过程中是成功还是失败。通常,返回值为0表示成功,返回值为正值表示各种错误。一些系统管理工具只对所有错误返回1,但许多工具对各种类型的错误使用其他正返回值。我们可以很容易地使用脚本来检查shell变量$?,可以通过命令列表中的下一个命令,也可以直接使用系统管理工具。我们一起来看看这些返回值。运行一个简单的命令并立即检查它的返回值,它总是属于最后一次运行的命令。[student@studentvm1~]$ll;echo"RC=$?"total284-rw-rw-r--1student学生130Sep1516:21ascii-program。09bindrwxr-xr-x。2student学生4096Aug1810:21VideosRC=0[student@studentvm1~]$返回值为0,表示命令执行成功。现在尝试在一些我们没有权限的目录上使用相同的命令。[student@studentvm1~]$ll/root;echo"RC=$?"ls:cannotopendirectory'/root':PermissiondeniedRC=2[student@studentvm1~]$这个返回值的含义可以在页面找到的ls命令的man中找到。现在让我们试试&&控制运算符,因为它也可以用在命令行程序中。我们将从一个简单的示例开始:创建一个新目录,如果成功,则在该目录中创建一个文件。我们需要一个目录才能创建其他目录。首先,在您的主目录中创建一个临时目录用于测试。[student@studentvm1~]$cd;mkdirtestdir在~/testdir新建一个目录,这个目录也应该是一个空目录,因为你刚刚创建的,然后在这个新目录新建一个空文件。下面的命令可以做这些事情。[student@studentvm1~]$mkdir~/testdir/testdir2&&touch~/testdir/testdir2/testfile1[student@studentvm1~]$ll~/testdir/testdir2/total0-rw-rw-r--1student学生0Nov1214:13testfile1[student@studentvm1~]$我们看到一切正常,因为testdir目录可以访问和写入。然后我们更改testdir目录的权限,让用户student不再有访问权限。操作如下:[student@studentvm1~]$chmod076testdir;我|greptestdird---rwxrw-.3studentstudent4096Nov1214:13testdir[student@studentvm1~]$在长列表(ll)命令后使用grep命令列出testdir目录。您可以看到用户student不再具有访问testdir目录的权限。现在我们运行与之前相同的命令,但在testdir目录中创建一个不同的目录。[student@studentvm1~]$mkdir~/testdir/testdir3&&touch~/testdir/testdir3/testfile1mkdir:cannotcreatedirectory'/home/student/testdir/testdir3':Permissiondenied[student@studentvm1~]$虽然我们这样做同样,您会收到一条错误消息,但是&&控制运算符会阻止touch命令运行,因为在创建testdir3目录时发生错误。这种复合流控可以防止一些错误的发生,把事情搞砸。但这看起来有点复杂。||控制运算符允许添加另一个命令,当初始程序语句返回大于0的值时执行该命令。[student@studentvm1~]$mkdir~/testdir/testdir3&&touch~/testdir/testdir3/testfile1||echo"创建目录时出错。"mkdir:cannotcreatedirectory'/home/student/testdir/testdir3':Permissiondenied创建目录时发生错误。[student@studentvm1~]$当我们使用&&和||时控制运算符,使用流控制的复合命令的语法格式通常如下所示。前面的命令;命令1&&命令2||命令3;followingcommands使用控制运算符的复合命令可以在其他命令之前或之后,这些命令与控制运算符流控制相关但不受其影响。无论复合命令的流程控制发生什么,所有命令都将被执行。这些流程控制运算符可以更有效地处理命令中的错误,并在程序出现问题时通知我们。我直接在命令行和脚本中使用它们。您可以以root用户身份删除此目录及其内容。[root@studentvm1~]#rm-rf/home/student/testdir如何使用Bash控制运算符?在评论部分告诉我们。