Linux 命令的链接意味着,组合多个命令并根据它们之间使用的操作符的行为使它们执行。
Linux 中的命令链就像您在 shell 本身编写简短的 shell 脚本,然后直接从终端执行它们。链接使得流程自动化成为可能。
此外,无人值守的机器可以在链接操作员的帮助下系统地运行。
本文旨在阐明常用的命令链运算符。它提供了简短的描述和相应的示例,可以提高您的工作效率,使您能够编写简洁、有意义的代码,同时有时会减少系统负载。
1. 与号运算符 (&) -- 在后台运行 Linux 命令
'&'的作用是让命令在后台运行。只需键入命令,后跟空格和"&"。您可以在后台一次性执行多个命令。
在后台运行一个名为"ping"的 Linux 命令:
sh
ping -c5 www.tecmint.com &
同时在后台运行两个或多个 apt 命令:
sh
apt update & apt upgrade &
2. 分号运算符 (;) -- 运行多个命令
分号 (;) 运算符使得可以一次运行多个命令,并且命令的执行按顺序发生。
sh
apt update ; apt upgrade ; mkdir test
上述命令组合将首先执行更新指令,然后执行升级指令,最后在当前工作目录下创建一个"test"目录。
3. AND 运算符 (&&) -- 成功后运行第二个命令
如果第一个命令执行成功,即第一个命令的退出状态为 0,则 AND 运算符 (&&) 仅执行第二个命令。该命令在检查最后一个命令的执行状态时非常有用。 例如,我想在终端中使用 links 命令访问网站 howtoing.com,但在此之前,我需要检查主机是否在线。
sh
ping -c3 www.tecmint.com && links www.tecmint.com
4. OR 运算符 (||) -- 条件命令执行
OR 运算符 (||) 很像编程中的"else"语句。 ||运算符允许您仅在第一个命令执行失败时才执行第二个命令,即第一个命令的退出状态为"1"。
例如,我想从非 root 帐户执行"apt update",如果第一个命令失败,则将执行第二个"links www.howtoing.com"命令。
sh
apt update || links tecmint.com
在上面的命令中,由于不允许用户更新系统,这意味着第一个命令的退出状态为"1",因此最后一个命令"links howtoing.com"被执行。
如果第一个命令成功执行,退出状态为"0"怎么办?明显地!第二个命令不会执行。
sh
mkdir test || links tecmint.com
在这里,用户在其主目录中创建一个允许用户使用的文件夹"test"。命令执行成功,退出状态为"0",因此命令的最后部分未执行。
5. NOT 运算符 (!) -- 选择性执行命令
NOT 运算符 (!) 很像" except "语句。该命令将执行除提供的条件之外的所有命令。要理解这一点,请在主目录中创建一个目录"howtoing"并"cd"到该目录。
sh
mkdir tecmint
cd tecmint
接下来,在文件夹"howtoing"中创建几种类型的文件。
sh
touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html
看到我们已经在文件夹"howtoing"中创建了所有新文件。
sh
ls
a.doc a.html a.pdf a.xml b.doc b.html b.pdf b.xml
现在使用 rm 命令以巧妙的方式一次性删除除"html"文件之外的所有文件。
sh
rm -r !(*.html)
只是为了验证,最后执行。使用 ls 命令列出所有可用文件。
sh
ls
a.html b.html
6. AND -- OR 运算符 (&& -- ||) -- 命令的条件执行
上述运算符是"AND"和"OR"运算符的组合。它很像"if-else"语句。
例如,让我们对 howtoing.com 执行 ping 操作,如果成功则回显"Verified",否则回显"Host Down"。
sh
ping -c3 www.tecmint.com && echo "Verified" || echo "Host Down"
示例输出:
sh
PING www.tecmint.com (212.71.234.61) 56(84) bytes of data.
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=1 ttl=55 time=216 ms
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=2 ttl=55 time=224 ms
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=3 ttl=55 time=226 ms
--- www.tecmint.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 216.960/222.789/226.423/4.199 ms
Verified
现在,断开互联网连接,然后再次尝试相同的命令。
sh
ping -c3 www.tecmint.com && echo "verified" || echo "Host Down"
示例输出:
sh
ping: unknown host www.tecmint.com
Host Down
7. PIPE 运算符 (|) -- 简化的输出处理
当第一个命令的输出充当第二个命令的输入时,此 PIPE 运算符非常有用。例如,将"ls -l"的输出通过管道传输到"less"并查看命令的输出。
sh
ls -l | less
drwx------ tecmint tecmint 4.0 KB Thu Nov 16 12:03:02 2023 AnyDesk
drwxrwxr-x tecmint tecmint 4.0 KB Tue Oct 10 10:44:35 2023 bin
drwxr-xr-x root root 4.0 KB Wed Nov 24 22:05:09 2021 DEBIAN
8.命令组合运算符{}
组合两个或多个命令,第二个命令取决于第一个命令的执行。
例如,检查目录"bin"是否可用,并输出相应的输出。
sh
[ -d bin ] || { echo Directory does not exist, creating directory now.; mkdir bin; } && echo Directory exists.
9. 优先运算符()------管理命令执行顺序
() 运算符可以按优先顺序执行命令。
sh
Command_x1 &&Command_x2 || Command_x3 && Command_x4.
在上面的伪命令中,如果Command_x1失败怎么办? Command_x2、Command_x3、Command_x4 都不会执行,为此我们使用优先运算符,如下所示:
sh
(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)
在上面的伪命令中,如果 Command_x1 失败,Command_x2 也会失败,但 Command_x3 和 Command_x4 仍然根据 Command_x3 的退出状态执行。
10. 连接运算符 () -- 多行命令连接
顾名思义,串联运算符 () 用于在 shell 中串联多行大型命令。例如,以下命令将打开文本文件 test(1).txt。
sh
nano test\(1\).txt
本文由mdnice多平台发布