bash 三元运算符
通常使用简单的复合命令,例如在命令行上按顺序将几个命令串在一起。 此类命令由分号分隔,分号定义了命令的结尾。 要在一行上创建一系列简单的Shell命令,只需使用分号分隔每个命令,如下所示:
command1 ; command2 ; command3 ; command4 ;
您不需要添加最终分号,因为按Enter键意味着最终命令的结尾,但是为了保持一致性,可以添加最后一个分号。
&&和|| Bash中内置的控制操作员。 这两个控制运算符提供了一些流控制,使我们能够更改代码执行顺序。 分号和换行符也被视为Bash控制运算符。&&运算符只是说“如果command1成功,则运行command2。” 如果command1由于任何原因失败,则command2将不会运行。 该语法如下:
command1 && command2
之所以有效,是因为每个命令都会向外壳返回一个代码,以指示该命令是在执行期间成功完成还是失败。 按照惯例,返回码(RC)为0(零)表示成功,任何正数表示某种类型的失败。 某些sysadmin工具仅返回1来指示任何故障,但是许多工具使用其他正数字代码来指示故障的类型。
Bash shell的$? 变量可以很容易地通过脚本,命令列表中的下一个命令或什至是系统管理员来检查。 让我们看一下RC。 我们可以运行一个简单的命令并立即检查RC,它始终与最后运行的命令有关。
[ student
@ studentvm1 ~
] $ ll ;
echo
"RC = $?"
total
284
-rw-rw-r--
1 student student
130 Sep
15
16 :
21 ascii-program.sh
drwxrwxr-x
2 student student
4096 Nov
10
11 :09 bin
< snip
>
drwxr-xr-x.
2 student student
4096 Aug
18
10 :
21 Videos
RC =
0
[ student
@ studentvm1 ~
] $
RC为0,表示命令成功完成。 现在,在我们没有权限的目录上尝试相同的命令。
[ student
@ studentvm1 ~
] $ ll
/ root ;
echo
"RC = $?"
ls: cannot open directory
'/root' : Permission denied
RC =
2
[ student
@ studentvm1 ~
] $
RC的含义可以在ls命令的手册页中找到 。
让我们尝试一下&&控件运算符,因为它可能会在命令行程序中使用。 我们将从简单的内容开始:创建一个新目录,如果成功,则在其中创建一个新文件。
我们需要一个目录,可以在其中创建其他目录。 首先,在主目录中创建一个临时目录,您可以在其中进行一些测试。
[ student @ studentvm1 ~ ] $ cd ; mkdir testdir
在〜/ testdir中创建一个新目录,该目录应该为空,因为您刚刚创建了该目录,然后在该新目录中创建一个新的空文件。 以下命令将执行这些任务。
[ student
@ studentvm1 ~
] $
mkdir ~
/ testdir
/ testdir2
&&
touch ~
/ testdir
/ testdir2
/ testfile1
[ student
@ studentvm1 ~
] $ ll ~
/ testdir
/ testdir2
/
total
0
-rw-rw-r--
1 student student
0 Nov
12
14 :
13 testfile1
[ student
@ studentvm1 ~
] $
我们知道一切正常,因为testdir目录是可访问和可写的。 改变TESTDIR权限,以便它不再是用户的学生如下访问:
[ student
@ studentvm1 ~
] $
chmod 076 testdir ; ll
|
grep testdir
d---rwxrw-.
3 student student
4096 Nov
12
14 :
13 testdir
[ student
@ studentvm1 ~
] $
在长列表( ll )之后使用grep命令显示testdir的列表。 您可以看到学生学生不再有权访问testdir目录。 现在,让我们运行与以前几乎相同的命令,但是将其更改为在testdir中创建一个不同的目录名称。
[ student
@ studentvm1 ~
] $
mkdir ~
/ testdir
/ testdir3
&&
touch ~
/ testdir
/ testdir3
/ testfile1
mkdir: cannot create directory ‘
/ home
/ student
/ testdir
/ testdir3’: Permission denied
[ student
@ studentvm1 ~
] $
尽管我们收到了一条错误消息,但是使用&&控件运算符会阻止touch命令运行,因为创建testdir3时出错 。 这种类型的命令行逻辑流控制可以防止错误加重和造成麻烦。 但是让我们稍微复杂一点。
|| 控制运算符允许我们添加另一个命令,该命令在初始程序语句返回大于零的代码时执行。
[ student
@ studentvm1 ~
] $
mkdir ~
/ testdir
/ testdir3
&&
touch ~
/ testdir
/ testdir3
/ testfile1
||
echo
"An error occurred while creating the directory."
mkdir: cannot create directory ‘
/ home
/ student
/ testdir
/ testdir3’: Permission denied
An error occurred
while creating the directory.
[ student
@ studentvm1 ~
] $
当我们使用&&和||时,使用流控制的复合命令语法采用这种通用形式。 控制人员:
preceding commands ; command1 && command2 || command3 ; following commands
使用控制运算符的复合命令可以在其他命令之前和之后,其他命令可能与流控制部分中的命令相关,但不受流控制的影响。 所有这些命令都将执行,而不考虑流控制复合命令内部发生的任何事情。
这些流程控制操作员可以通过处理决策并在发生问题时通知我们来提高命令行的工作效率。 我直接在命令行以及脚本中使用它们。
您可以以root用户身份清除,以删除目录及其内容。
[ root @ studentvm1 ~ ] # rm -rf /home/student/testdir
您如何使用Bash控制运算符? 在评论部分让我们知道。
翻译自: https://opensource.com/article/18/11/control-operators-bash-shell
bash 三元运算符