整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

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

inux 命令的链接意味着,组合多个命令并根据它们之间使用的操作符的行为使它们执行。

Linux 中的命令链就像您在 shell 本身编写简短的 shell 脚本,然后直接从终端执行它们。链接使得流程自动化成为可能。

此外,无人值守的机器可以在链接操作员的帮助下系统地运行。

本文[1]旨在阐明常用的命令链运算符。它提供了简短的描述和相应的示例,可以提高您的工作效率,使您能够编写简洁、有意义的代码,同时有时会减少系统负载。

1. 与号运算符 (&) – 在后台运行 Linux 命令

‘&’的作用是让命令在后台运行。只需键入命令,后跟空格和“&”。您可以在后台一次性执行多个命令。

在后台运行一个名为“ping”的 Linux 命令:

ping -c5 www.tecmint.com &

同时在后台运行两个或多个 apt 命令:

apt update & apt upgrade &

2. 分号运算符 (;) – 运行多个命令

分号 (;) 运算符使得可以一次运行多个命令,并且命令的执行按顺序发生。

apt update ; apt upgrade ; mkdir test

上述命令组合将首先执行更新指令,然后执行升级指令,最后在当前工作目录下创建一个“test”目录。

3. AND 运算符 (&&) – 成功后运行第二个命令

如果第一个命令执行成功,即第一个命令的退出状态为 0,则 AND 运算符 (&&) 仅执行第二个命令。该命令在检查最后一个命令的执行状态时非常有用。 例如,我想在终端中使用 links 命令访问网站 howtoing.com,但在此之前,我需要检查主机是否在线。

ping -c3 www.tecmint.com && links www.tecmint.com

4. OR 运算符 (||) – 条件命令执行

OR 运算符 (||) 很像编程中的“else”语句。 ||运算符允许您仅在第一个命令执行失败时才执行第二个命令,即第一个命令的退出状态为“1”。

例如,我想从非 root 帐户执行“apt update”,如果第一个命令失败,则将执行第二个“links www.howtoing.com”命令。

apt update || links tecmint.com

在上面的命令中,由于不允许用户更新系统,这意味着第一个命令的退出状态为“1”,因此最后一个命令“links howtoing.com”被执行。

如果第一个命令成功执行,退出状态为“0”怎么办?明显地!第二个命令不会执行。

mkdir test || links tecmint.com

在这里,用户在其主目录中创建一个允许用户使用的文件夹“test”。命令执行成功,退出状态为“0”,因此命令的最后部分未执行。

5. NOT 运算符 (!) – 选择性执行命令

NOT 运算符 (!) 很像“ except ”语句。该命令将执行除提供的条件之外的所有命令。要理解这一点,请在主目录中创建一个目录“howtoing”并“cd”到该目录。

mkdir tecmint 
cd tecmint

接下来,在文件夹“howtoing”中创建几种类型的文件。

touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html

看到我们已经在文件夹“howtoing”中创建了所有新文件。

ls 

a.doc  a.html  a.pdf  a.xml  b.doc  b.html  b.pdf  b.xml

现在使用 rm 命令以巧妙的方式一次性删除除“html”文件之外的所有文件。

rm -r !(*.html)

只是为了验证,最后执行。使用 ls 命令列出所有可用文件。

ls 

a.html  b.html

6. AND – OR 运算符 (&& – ||) – 命令的条件执行

上述运算符是“AND”和“OR”运算符的组合。它很像“if-else”语句。

例如,让我们对 howtoing.com 执行 ping 操作,如果成功则回显“Verified”,否则回显“Host Down”。

ping -c3 www.tecmint.com && echo "Verified" || echo "Host Down"

示例输出:

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

现在,断开互联网连接,然后再次尝试相同的命令。

ping -c3 www.tecmint.com && echo "verified" || echo "Host Down"

示例输出:

ping: unknown host www.tecmint.com 
Host Down

7. PIPE 运算符 (|) – 简化的输出处理

当第一个命令的输出充当第二个命令的输入时,此 PIPE 运算符非常有用。例如,将“ls -l”的输出通过管道传输到“less”并查看命令的输出。

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”是否可用,并输出相应的输出。

[ -d bin ] || { echo Directory does not exist, creating directory now.; mkdir bin; } && echo Directory exists.

9. 优先运算符()——管理命令执行顺序

() 运算符可以按优先顺序执行命令。

Command_x1 &&Command_x2 || Command_x3 && Command_x4.

在上面的伪命令中,如果Command_x1失败怎么办? Command_x2、Command_x3、Command_x4 都不会执行,为此我们使用优先运算符,如下所示:

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)

在上面的伪命令中,如果 Command_x1 失败,Command_x2 也会失败,但 Command_x3 和 Command_x4 仍然根据 Command_x3 的退出状态执行。

10. 连接运算符 () – 多行命令连接

顾名思义,串联运算符 () 用于在 shell 中串联多行大型命令。例如,以下命令将打开文本文件 test(1).txt。

nano test\(1\).txt

Reference

[1]Source: https://www.tecmint.com/chaining-operators-in-linux-with-practical-examples/


、使用 div 后,什么时候使用 table

Web标准并不排除表格的使用,但使用表格排版是不明智的,因为表格归根结底只是一种显示“数据”的方式。大家应该知道,在 Excel 中,表格就是用来放置数据信息的。使用表格显示信息能让浏览者阅读起来更轻松,表达也更清楚。

XHTML 中的元素可分为三大类,下面分别介绍。

辅助布局设计元素:主要指div、span等,这类元素的主要功能是布局整个页面。灵活使用这些元素,能让网页丰富多彩。

结构化元素或信息元素:主要指table、ul、pre、code等元素,是一种信息显示与整理方式,如 table 是用来显示表格信息的,ul是用来显示列表信息的,当需要用表格或列表的时候,用这两种方式来显示是合理的。

为实现某些功能而添加的元素:如添加关键字的meta keyword,设置链接的a等。由上面的分析可知,符合Web标准的设计思路是,使用div等布局元素来制作页面的布局、定位、色块、图像等,使用table、ul等元素来显示页面中需要展示的数据。这实际上是一个信息合理化整合的过程,什么地方该用什么元素还是照用不误。

二、初学 Web 标准的几个误区

初次接触 Web标准的用户可能会受表格布局或其他一些问题的影响,常见问题及解决建议如下:

1.不要用传统的表格思维来套div

用惯了表格的用户可能会觉得,CSS 布局就是将原来用table的地方用div来代替,原来是 table 嵌套,现在是 div嵌套。这种观点是错误的。

应该跳出表格布局的禁锢,抛弃一个td接一个td放置内容的思维方式。按前文所述,Web标准的目的是将内容和表现完全分离。即在加入表现之前,页面里有的仅仅是内容,在没有修饰的情况下,它就是一张有一些文字和图像(图像是指内容中的图像,是有真正意义的图像,而非修饰性的图像)的简单页面,这些文字和图像仅仅是依次罗列下来,只有结构,没有任何样式。当加人表现,将所有修饰的图像作为背景,用CSS 来定义每一块内容的位置、字体、颜色等时,才构成了一个完整的页面。

这样制作的页面才是内容与表现完全分离的,即抽掉 CSS 文件,剩下的就只是干净的内容。

2.不必为每块内容都创建一个id

内容都是有结构的,相同结构的内容可以用同一个样式来定义,如相同级别的标题、正文、图像等。对干多次引用的样式可以用cass 来定义,不需要全部用id:另外也不是说只能用 div 布局,在需要的时候,完全可以用p来代替。

至于仅仅为了行高、间距,或者一个修饰性图像而增加的div,随着大家对 CSS应用的熟练和理解,很快就会知道这是没有必要的。希望大家多研究 CSS,做出最简练、最有效的样式表。

够快速地错误定位,解决问题,是我们开发中非常重要的一种能力。

从浏览器控制台到运行Node.js的计算机终端,我们到处都会看到错误。

这篇文章重点介绍了在JS开发过程中可能遇到的 7 种错误类型。

1. RangeError 范围错误

当数字超出允许的值范围时,将抛出此错误;或者JS执行进入死循环。

我们有一个数组,带有两个元素的arr。 接下来,我们尝试将数组扩展为包含90 ** 99 = 2.9512665430652753e + 193元素。

这个数字超出了数组最大的长度范围。 运行它会抛出RangeError:

因为我们要增加arr数组的数量超出了JS指定的范围。

2. ReferenceError 引用错误

当对变量/项目的引用被破坏时,将引发此错误。 那是变量/项目不存在。

我们有一个变量cat初始化为"cat"。 接下来,我们参考cat变量和dog变量。 cat变量存在,而dog变量不存在。

cat将返回”cat”,而dog将引发参考错误,因为在环境记录中找不到名称dog。

每当我们创建或定义变量时,变量名称都会写入环境记录中。 此环境记录就像键值存储一样,

每当我们引用变量时,它都会存储程序中定义的变量。 当在记录中找到环境值并提取并返回值时,将以该变量的名称作为关键字搜索环境记录。 调用尚未定义的函数。

现在,当我们创建或定义一个没有赋值的变量时。 该变量以键作为变量名称写入环境记录,但该值将保持未定义状态。

稍后为变量分配值时,将在env记录中搜索该变量,当找到初始未定义值时,该赋值将被覆盖。

因此,当在环境记录中找不到变量名时,JS引擎会引发ReferenceError。

注意:未定义的变量不会抛出ReferenceError,因为它存在于环境记录中只是它的值尚未设置。

3. SyntaxError 语法错误

这是我们遇到的最常见的错误。 当我们键入JS引擎可以理解的代码时,会发生此错误。

解析期间,JS引擎捕获了此错误。 在JS引擎中,我们的代码经过不同的阶段,然后才能在终端上看到这些结果。

  • tokenization 标记化
  • parsing 解析
  • interpreting 编译

标记化将代码的源分解为各个单元。 在此阶段,将对数字,关键字,文字,运算符进行整理并分别进行标记。

接下来,生成的令牌流将传递到解析阶段,由解析器处理。 这是从令牌流生成AST的地方。 AST是我们代码结构的抽象表示。

在这两个阶段,即标记化和解析,如果我们代码的语法/源不符合JS的语法规则,则会使阶段失败并引发SyntaxError。 例如,

单独的h代表什么? 那里的h破坏了代码。

因此,我们可以说语法错误发生在解析/编译期间。

4. TypeError 类型错误

当其他NativeError对象中没有一个是失败原因的适当指示时,TypeError用于指示操作失败。

对错误的数据类型执行操作时会发生TypeError。 可能是布尔值,但是找到了ing。

例如, 如果我们尝试将数字转换为大写,如下所示:

将抛出一个 TypeError

因为toUpperCase函数需要字符串数据类型。 toUpperCase函数是有意通用的; 它不需要其this值为String对象。 因此,可以将其转移到其他类型的对象中用作方法。

如果我们对Objects,Boolean,Symbol,null,undefined数据类型调用toUpperCase函数,则只有字符串会转换为大写或小写形式,我们将得到TypeError,因为它操作的数据类型错误。

5. URIError

这表明使用一种全局URI处理功能与其定义不兼容。

JS中的URI(统一资源指示符)具有以下功能:decodeURI,decodeURIComponent等。

如果我们使用错误的参数调用它们中的任何一个,我们将得到URIError

encodeURI,获取URI的未编码版本。 "%"不是正确的URI,因此引发了URIError。

如果对URI进行编码或解码有问题,则会引发URIError。

6. EvalError

在使用全局eval()函数时,此函数用于识别错误。

根据EcmaSpec 2018版: 此规范当前未使用此异常。 保留该对象是为了与本规范的先前版本兼容。

7. InternalError 内部错误

该错误在JS引擎内部发生,特别是当它有太多数据要处理并且堆栈增长超过其关键限制时。

当JS引擎被太多的递归,太多的切换情况等淹没时,就会发生这种情况

太多的递归,一个简单的例子是这样的:

总结

正如我们所说,没有人能避免犯错误。 就我们键入代码而言,这是一个稳定的事件。 为了克服它,我们需要知道可以抛出的本机错误的类型。 我们在这篇文章中列出了它们,并提供了一些示例来说明它们是如何遇到的。

因此,无论何时在终端或浏览器中引发错误,您现在都可以轻松发现错误发生的位置和方式,并编写更好,更不易出错的代码。

文/H5技术专家:云和数据阿宽老师

想学习前端,请关注并私信:h5学习,赠送您学习大礼包!