shell通配符特殊符号与转义符

Posted Dayo Yan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell通配符特殊符号与转义符相关的知识,希望对你有一定的参考价值。

通配符(wildcard)是由shell处理的(不是由所涉及到命令语句处理的),它只会出现在命令的"参数"里(它不用在命令名称,也不用在操作符上)

通配符

含义

*

匹配零个或多个字符

匹配任意单个字符

[c1-c2]

匹配c1到c2(如[0-9],[a-z])中的任意单一字符

[list]

匹配list中的任意单一字符

[^list]

匹配非list中的任意单一字符

{string1,string2,…}

匹配string1或string2…其中一个字符串(注意是花括号)

   

查看硬盘文件的相关权限属性

   

找出/etc/目录下以cron为开头的文件名

   

找出/etc/目录下文件名刚好是五个字符的文件名

   

找出/etc/目录下文件名开头非a到x字母的文件名

   

其他特殊符号Meta(shell元字符)

字符

说明

IFS

(内部域分割符)由 <space> 或 <tab> 或 <enter> 三者之一组成(我们常用 space )。

CR

由 <enter> 产生。

#

批注符号,这个最长被使用在script脚本当中,视为说明,其后的数据均不执行。

~

用户的主文件夹

=

设定变量。

$

作变量(变量前导符,即变量之前需要加的变量替代值)或运算替换

>,>>

重定向 stdout,分别是"替换"与"追加"。 *

<,<<

重定向 stdin,分别是"替换"与"追加"。 *

|

管道(pipe),分隔两个管道命令的界定。 *

&

重导向 file descriptor ,或将命令置于背景下执行(作业控制 job control)。 *

( )

在中间为子shell的执行与结束(将其内的命令置于nested subshell执行),或用于运算或命令替换。 *

{ }

在中间为命令块的组合(将其内的命令置于 non-named function 中执行),或用在变量替换的界定范围。

;

在前一个命令结束时,而忽略其返回值,继续执行下一个命令(组合连续执行,命令之间无任何逻辑上的关系,区分于管道命令)。 *

&&

在前一个命令结束时,若返回值为 true,继续执行下一个命令。 *

||

在前一个命令结束时,若返回值为 false,继续执行下一个命令。 *

!

执行 history 列表中的命令。*

加入"*" 的字符是作用在命令名之间的。

可以发现shell 元字符,基本是作用在命令上,用作多命令分割(或者参数分割)。

因此看到与通配符有相同的字符(如!),但是实际上作用范围不同。所以不会出现混淆。

   

=:设定变量,$:变量前导符

   

&:将命令变成背景下工作(后台执行,退出shell后进程会停止)

<http://www.cnblogs.com/TianFang/archive/2013/01/23/2872645.html>

使用jobs命令查看当前后台命令(状态:running运行、stopped暂停、terminated终止),当前打包压缩的job号为1

fg 1:调至前台继续运行(ctrl+z可使前台进程挂起放置背景(stopped状态))

bg 1:将一个后台暂停(stopped)的进程,变成后台执行(running)

kill %1:终止(terminated)后台进程

使用ps命令查看进程状态,当前打包压缩的进程号PID为4463、4467

kill 4464;kill 4467:终止tar、gzip后台进程

参考资料: <https://zhidao.baidu.com/question/1819125360697847748.html>

   

;(分号):组合连续执行命令,命令间无任何逻辑上的关系,仅按循序执行

   

command1 && command2:仅当command1命令执行成功后才会执行&&控制符后面的command2命令

   

command1 || command2:仅command1命令执行失败后才执行||控制符后面的 command2命令(若前一个命令command1执行成功,则command2不执行,也就是command1和command2总仅有一条命令执行)

   

特殊字符用法: <https://www.cnblogs.com/lidabo/p/4323979.html>

   

转义字符

字符

说明

\'\'(单引号)

又叫硬转义,其内部所有的shell 元字符、通配符的特殊意义都会被屏蔽。注意:不可以在两个单引号(硬转义)中间单独插入一个单引号,单引号必须成对出现。

""(双引号)

又叫软转义,类似于单引号(硬转义),但其内部不会屏蔽`(单引号)、\\(反斜杠)、$(变量前导符)这三个字符的特殊意义。

\\(反斜杠)

又叫转义,去除其后紧跟的元字符或通配符的特殊意义。

``(反引号)

用于命令代替,把其中的命令执行后返回一个结果(就是先执行的命令,然后其执行结果将作为外部命令的输入信息。也可使用$()替代)

\'\'单引号(硬转义)

   

""双引号(软转义)

   

\\反斜杠(转义)

   

使用硬转义(一对\'\'单引号)输出\'单引号:$\'\\\'\'("$"+"单引号\'"+"\\"+"单引号\'"+"单引号\'")

   

``反引号(最好使用$()代替)(``命令替换操作会创建一个子shell来运行对应的命令)

   

花括号{}的使用技巧:通过花括号扩展可以生成命令行或脚本所需要的字符串

  1. 括号中可以包含连续的序列或使用逗号分隔的多个项目;

  2. 连续的序列包括一个起点与一个终点,并使用".."(两个点)分隔。

   

   

理论上,文件名尽量不要使用到本笔记所提到的上述字符

   

   

参考资料: <http://www.cnblogs.com/chengmo/archive/2010/10/17/1853344.html>

以上是关于shell通配符特殊符号与转义符的主要内容,如果未能解决你的问题,请参考以下文章

Shell 特殊符号

shell通配符及特殊符号

shell中的命令与特殊符号

shell特殊符号

shell中的特殊符号

MyBatis中特殊符号的转义