Linux中的链接运算符详解 - 提高编程效率与性能

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多平台发布

相关推荐
北京_宏哥3 小时前
《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(8)-Charles如何进行断点调试
程序员·前端框架·api
完全妹口音3 小时前
协程:概念、实现与性能浅谈
程序员
这我可不懂4 小时前
低代码开发 实战转型案例一览
前端·低代码·程序员
吴敬悦20 小时前
领导:按规范提交代码conventionalcommit
前端·程序员·前端工程化
程序员联盟1 天前
用ChatGPT来提高效率:前言
人工智能·chatgpt·程序员
blzlh1 天前
Vue 数据驱动页面,让我们专注于业务开发
前端·vue.js·程序员
Javatutouhouduan2 天前
如何系统全面地自学Java语言?
java·后端·程序员·编程·架构师·自学·java八股文
前端切圖仔2 天前
失业,仲裁,都赶上了(二)
前端·javascript·程序员
小李小李不讲道理3 天前
行动+思考 | 2024年度总结
前端·程序员·年终总结
聪小陈4 天前
圣诞节:记一次掘友让我感动的时刻
前端·程序员