欢迎大家来到IT世界,在知识的湖畔探索吧!
摘要:今天更新应用系统的补丁时出现了问题,供应商将补丁文件的压缩包上传到服务器的对应目录,在执行解压过程中,出现文件名称包含无效符号的错误,导致文件无法解压成功。经查发现是压缩包名称含有中文符号的括号(1),在解压的时候无法识别该符号,后来将该压缩包名称用‘’(单引号)括起来,并重名后再成功解压。
本文主要将上述过程记录下来,重点是介绍脚本语言符号的使用方法。详细内容请参考下文。
一、登录Linux系统
说明:通过SSH登录系统
欢迎大家来到IT世界,在知识的湖畔探索吧!
二、Shell脚本符号
1、通配符
说明:通配符是出现在shell命令的“参数”里。当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配,若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符实际上就是一种shell实现的路径扩展功能。在通配符被处理后, shell会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。
|
字符 |
含义 |
实例 |
|
* |
匹配 0 或多个字符 |
a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcdb, axyzb, a01234b, ab。 |
|
? |
匹配任意一个字符 |
a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, acb, a1b, a2b。 |
|
[list] |
匹配 list 中的任意单一字符 |
a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。 |
|
[!list] |
匹配 除list 中的任意单一字符 |
a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。 |
|
[c1-c2] |
匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] |
a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b… a9b。 |
|
{string1,string2,…} |
匹配 sring1 或 string2 (或更多)其一字符串 |
a{abc,xyz,123}b a与b之间只能是abc或xyz或123这三个字符串之一。 |
备注:通配符看起来有点象正则表达式语句,但是它与正则表达式不同的,不能相互混淆。把通配符理解为shell 特殊代号字符就可。而且涉及的只有*,?,[],{} 这几种。
2、元符号
说明:shell除了有通配符之外,还有一系列自己的其他特殊字符,由shell负责预先先解析后,将处理结果传给命令行。
|
字符 |
说明 |
|
IFS |
由 <space> 或 <tab> 或 <enter> 三者之一组成(我们常用 space )。 |
|
CR |
由 <enter> 产生。 |
|
= |
设定变量。 |
|
$ |
作变量或运算替换。 |
|
> |
重定向 导出 stdout。 * |
|
< |
重定向 导入 stdin。 * |
|
| |
命令管线。 * |
|
& |
重导向 file descriptor ,或将命令置于背境执行。 * |
|
( ) |
将其内的命令置于 nested subshell 执行,或用于运算或命令替换。 * |
|
{ } |
将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。 |
|
; |
在前一个命令结束时,而忽略其返回值,继续执行下一个命令。 * |
|
&& |
在前一个命令结束时,若返回值为 true,继续执行下一个命令。 * |
|
|| |
在前一个命令结束时,若返回值为 false,继续执行下一个命令。 * |
|
! |
执行 history 列表中的命令。* |
备注:shell 元字符,基本是作用在命令上面,用作多命令分割(或者参数分割)。
3、转义符
说明:有时候想让通配符,或者元字符,变成普通字符,不需要使用它原本的含义。那么就需要用到转义符了。
shell提供转义符有三种。
|
字符 |
说明 |
|
‘’(单引号) |
又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。 |
|
“”(双引号) |
又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替。 |
|
\(反斜杠) |
又叫转义,去除其后紧跟的元字符或通配符的特殊意义。 |
三、脚本无效符号的解决过程
1、出现问题
执行指令# ls -al
问题:压缩包出现(1)符号,Linux无法正常识别。
执行指令# unzip 压缩包名称 进行解压
出现错误提示
无法正常压缩
执行指令# mv 原压缩包名称 新压缩包名称 进行改名
一样提示错误
无法进行文件改名
2、使用转义符解决问题
执行指令# mv ‘*
_security__v9.0_v10.58.2 (1)(1).zip’ *
_security__v9.0_v10.58.2_1.zip
备注:执行改名指令的时候,将压缩包名称加上转义符单引号,改名成功。然后解压。
或者执行指令# cp ‘*
_security__v9.0_v10.58.2 (1)(1).zip’ *
_security__v9.0_v10.58.2_2.zip
备注:执行复制指令的时候,将压缩包名称加上转义符单引号,复制成功。然后也可以解压。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/130721.html