Shell特殊字符小结
Shell特殊字符小结
shell通配符
字符 | 含义 | 实例 |
---|---|---|
* | 匹配 0 或多个字符 | a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有,如ab,acb,a22b |
? | 匹配任意一个字符 | a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b |
[list] | 匹配 list 中的任意单一字符 | a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。 |
[!list]或[^list] | 匹配 list 中的任意单一字符 | a[!0-9]b a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b |
[x-y] | 匹配 x-y 中的任意单一字符 如:[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 特殊代号字符就可.
shell元字符
字符 | 含义 |
---|---|
IFS | 由 ‘space’ 或 ‘tab’ 或 ‘enter’ 三者之一组成,我们常用 space |
CR | 由 ‘enter’ 产生 |
= | 设定变量 |
$ | 作变量或运算替换(请不要与 shell prompt 搞混了) |
> | 重导向 stdout |
< | 重导向 stdin |
竖线 | 命令管线 |
& | 重导向 file descriptor ,或将命令置于背境执行 |
( ) | 将其内的命令置于 nested subshell 执行,或用于运算或命令替换 |
{ } | 将其内的命令置于匿名function中执行,或用在变量替换的界定范围 |
; | 在前一个命令结束时,而忽略其返回值,继续执行下一个命令 |
&& | 在前一个命令结束时,若返回值为 true,继续执行下一个命令 |
! | 执行 history 列表中的命令,如 !188, |
shell转义符
字符 | 含义 |
---|---|
‘’(单引号) | 又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号) |
“”(双引号) | 又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换,`用于命令代替 |
\(反斜杠) | 又叫转义,去除其后紧跟的元字符或通配符的特殊意义 |
注意:’’倒引号 (backticks),中间的内容会当做命令来执行,如
d=date +%F
echo “Today $d”,在倒引号内的 date +%F 会被视为指令,执行的结果会带入 d 变数中。
文件描述符(File Descriptor)
文件描述符 | 名称 | 默认值 |
---|---|---|
0 | 标准输入 stdin | 键盘 |
1 | 标准输出 stdout | 屏幕 |
2 | 标准错误输出 stderr | 屏幕 |
1 | cmd > file 把 stdout 重定向到 file 文件中 |
Dollar符号-$
1 | $# --> 执行shell脚本命令行参数的个数,不包含脚本本身 |
感叹号-!
1 | !! --> 表示你执行的上一条命令,cat !! |
其他
波浪号(~)
~ 帐户的 home 目录
~+ 当前的工作目录,这个符号代表当前的工作目录,与pwd作用一致
~- 上次的工作目录,这个符号代表上次的工作目录。
转换为十进制
echo \$((2#11111111)) 255(二进制转换为十进制)
echo \$((8#10)) 8(八进制转换为十进制)
echo \$((16#a)) 10(十六进制转换为十进制)
逗号(,)
, 逗点 (comma,标点中的逗号)
这个符号常运用在运算当中当做”区隔”用途。1
2
3
4
5[root@root ~]# ((a=1+2,b=2-1))
[root@root ~]# echo $a
3
[root@root ~]# echo $b
1
括号()
( ) 指令群组 (command group)
用括号将一串连续指令括起来,这种用法对 shell 来说,称为指令群组。如下面的例子:(cd ~ ; vcgh=pwd
;echo $vcgh),指令群组有一个特性,shell会以产生 subshell来执行这组指令。因此,在其中所定义的变数,仅作用于指令群组本身.
(( )) 双括号
这组符号的作用与 let 指令相似,用在算数运算上,是 bash 的内建功能。所以,在执行效率上会比使用 let指令要好许多。
[] 中括号和[[ ]]
这组符号与先前的 [] 符号,基本上作用相同,但她允许在其中直接使用 || 与&& 逻辑等符号。