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

相关推荐
嚣张农民13 小时前
推荐3个实用的760°全景框架
前端·vue.js·程序员
梓羽玩Python14 小时前
推荐一款用了5年的全能下载神器:Motrix!全平台支持,不限速下载网盘文件就靠它!
程序员·开源·github
梓羽玩Python14 小时前
这款一站式AI体验平台值得收藏起来!GPT-4o、GPT-4o Mini、Claude 3.5 Sonnet免费使用!
人工智能·程序员·设计
前端宝哥1 天前
10 个超赞的开发者工具,助你轻松提升效率
前端·程序员
XinZong1 天前
【VSCode插件推荐】想准时下班,你需要codemoss的帮助,分享AI写代码的愉快体验,附详细安装教程
前端·程序员
Goboy2 天前
0帧起步:3分钟打造个人博客,让技术成长与职业发展齐头并进
程序员·开源·操作系统
JaxNext2 天前
不选总统选配色,这一票投给 CSS logo
前端·css·程序员
程序员鱼皮3 天前
刚毕业,去做边缘业务,还有救吗?
计算机·程序员·互联网·求职·简历
WujieLi3 天前
独立开发沉思录周刊:vol18.AI 正在成为无处不在的基础设施
程序员·设计·创业
_祝你今天愉快3 天前
重学Android:从位运算到二进制表示(零)
算法·程序员