Linux 中的链接命令
Linux 中的链接命令允许我们同时直接通过终端执行多个命令。它就像可以直接通过终端执行的简短 shell 脚本。 Linux 命令链是一种合并多个命令的技术,这样每个命令都可以根据分隔它们的运算符按顺序执行,这些运算符决定命令将如何执行。它允许我们连续或同时运行多个命令。
一些常用的链接运算符如下: Operators Function& (Ampersand) This command sends a process/script/command to the background. && (Logical AND) The command following this operator will only execute if the command preceding this operator has been successfully executed. ; (Semi-colon) The command following this operator will execute even if the command preceding this operator is not successfully executed. || ( Logical OR) The command succeeding this operator is only executed if the command preceding it has failed. | (Pipe) The output of the first command acts as input to the second command. ! (NOT) Negates an expression within a command. It is much like an “except” statement. >,>>, < (Redirection) Redirects the output of a command or a group of commands to a file or stream. &&-|| (AND-OR) It is a combination of AND OR operator and is similar to the if-else statement. \ (Concatenation) Used to concatenate large commands over several lines in the shell. () (Precedence) Allows command to execute in precedence order. {} (Combination) The execution of the command succeeding this operator depends on the execution of the first command.
与链运算符工作
1、与号(&)运算符:用于在后台运行一个命令,以便执行其他命令。它将进程/脚本/命令发送到后台,以便其他命令可以在前台执行。它提高了系统资源的有效利用率并加快了脚本执行速度。这在其他编程语言中也称为子进程创建或分叉。 &符号可以如下使用:
ping -cl google.com & #change the command before &
ping -c1 google.com & ping -c1 geeksforgeeks.org &
2. AND (&&) 运算符:此运算符的命令只有在其前面的命令执行成功时才会执行。如果第一个命令已成功执行,当我们想要执行命令时,这很有帮助。
echo "hello there" && echo "this is gfg"
apt update && echo "hello"
3.分号(;)运算符:用于在一次运行中顺序运行多个命令。但需要注意的是,由 (;)运算符链接的命令始终按顺序执行。如果两个命令被运算符分开,那么第二个命令将始终独立于第一个命令的退出状态执行。与 &运算符不同,第二个命令的执行与第一个命令的退出状态无关。即使第一个命令没有成功执行,即退出状态非零,第二个命令也将始终执行。
who;pwd;ls
这三个命令将依次执行。但是,即使第一条命令执行不成功,( ; )运算符之前的命令的执行也会执行。
4.逻辑OR(||)操作员:该命令后面的这个运算符,如果命令的执行前述它不能将只执行。它很像 else 语句。如果第一个命令的执行状态为非零,则将执行第二个命令。
echo "hello there" || echo "This is gfg"
apt update || echo "hello"
5. 管道 (|) 运算符:此运算符将第一个命令的输出发送到第二个命令的输入。
ls -l | wc -l
在上面的命令中wc -l显示行数。 ls -l显示系统中的文件列表。第一个命令显示目录中的文件数。 ls – l 列出文件的名称,并将此输出发送到下一个命令,该命令计算输入中的行数。因此,通过使用管道,我们可以获得目录中的文件数。
6. NOT (!)运算符:用于否定 command/ 中的表达式。我们可以使用它来删除目录中除一个之外的所有文件。
touch a.txt b.txt c.txt d.txt e.txt
rm -r !(a.txt)
此命令将删除目录中除a.txt之外的所有文件。在下图中,我们在目录中使用 touch 命令创建了一些文件。 ls 显示目录中的文件。要删除除“a.txt”之外的所有文件,我们使用!操作员。如果我们再次列出文件,我们可以看到除 a.txt 之外的所有文件都被删除了。
7. 重定向运算符('<','>','>>'):该运算符用于将一个命令或一组命令的输出重定向到一个流或文件。此运算符可用于重定向标准输入或标准输出或两者。几乎所有命令都接受带有重定向运算符的输入。
cat >>file_name
sort
第一个命令创建一个名为“file_name”的文件(重定向运算符>> 允许我们在文件中提供输入),而第二个命令将对文件的内容进行排序。参考下图,我们先创建一个带有数字的文件,然后使用这个命令。这对文件的内容进行排序。
8. AND、OR 运算符作为if-else 条件:此命令可用作if-else 语句。它是逻辑 AND 和逻辑 OR运算符的组合。
[ ! -d ABC ] && mkdir ABC || cd ABC
此命令将首先检查目录“ABC”是否存在。如果它不存在,则创建一个新目录,否则“ABC”成为当前目录。参考下图,名为“ABC”的目录不存在,因此创建了它。第二次执行相同的命令时,目录已经存在,因此“ABC”成为当前目录。
9. 连接运算符(\):用于在shell 中连接多行的大命令。它还提高了用户的可读性。一个大命令被分成几行,因此,它用于执行大命令。
gedit text\(1\).txt
它将打开一个名为 text(1) 的文件。
10. Precedence:该命令用于设置先行值,以便多个命令可以按给定的顺序执行。
cmd1 && cmd 2 || cmd3
( cmd1 && cmd 2 ) || cmd3
在第一种情况下,如果第一个命令成功,那么第二个命令将被执行,但第三个命令不会执行。但在第二种情况下,第三个命令将被执行,因为使用 ()运算符设置了优先级。参考下图: 如果目录存在(第一个命令),则当前目录变为 PQR(第二个命令),但在第一种情况下,第三个命令不会被执行,而在第二种情况下,当使用优先运算符时第三个命令也被执行。
11. 组合运算符({}):此运算符之后的命令的执行取决于第一个命令的执行。使用 {}运算符组合的命令集在其前面的命令成功执行时执行。
[ -f hello.txt ] && echo "file exists" ; echo "hello"
[ -f hello.txt ] && { echo "file exists" ; echo "hello"; }
在第一种情况下, hello 总是会被打印出来。如果文件存在,那么命令将在 &&运算符之前执行。如果我们只想在文件存在时同时执行第二个和第三个命令,那么我们使用 {}运算符来组合这些命令。