用在bash脚本或命令行中的特殊字符
1、#井号 :注释
- 在echo中转义的#是不能作为注释的
- 某些特定的模式匹配操作也可以使用#、
2、; 分号:命令分隔符,使用命令分隔符,可以在同一行上写两个或两个以上的命令
3、;; 双分号:用来终止case选项
4、.点号 :
- ”点“命令,等价于source命令
- ”点“作为文件名的一部分. 如果点放在文件名的开头的话, 那么这个文件将会成为”隐藏“文件
- ”点“字符匹配,当用作匹配字符的作用时,通常都是作为正则表达式的一部分来使用,”点“用来匹配任何的单个字符
5、"双引号:部分引用,“STRING”将会阻止(解释)STRING中大部分特殊的字符
6、`单引号:全引用,’STRING‘将会阻止STRING中所有特殊字符的解释
7、,逗号:逗号操作符.,逗号操作符链接了一系列的算术操作,虽然里边所有的内容都被运行了,但只有最后一项被返回
8、\反斜线:转义符
9、/斜线:文件名路径分隔符,也可用作除法算术操作符
10、`:命令替换,`command`结构可以将命令的输出赋值到一个变量中去
11、:冒号:空命令,等价于“NOP”,也可以被认为与shell的内建命令true作用相同
- 可用在while死循环中,while :
- 在if/then中的占位符,if XXX ; then : ;else XXX
- 在一个二元命令中提供一个占位符,: ${username=`whoami`},如果没有开头的":"的话, 将会提示一个错误,除非"username"是一个命令或者内建命令
- 在here document中提供一个命令所需的占位符
- 使用参数替换来评估字符串变量,: ${HOSTNAME?} ${USER?} ${MAIL?},如果一个或多个必要的环境变量没被设置的话,就打印错误信息
- 在与>重定向操作符结合使用时, 将会把一个文件清空, 但是并不会修改这个文件的权限. 如果之前这个文件并不存在, 那么就创建这个文件(: > data.xxx # 文件"data.xxx"现在被清空了)
- 还可用来在/etc/passwd和$PATH变量中做分隔符
12、!叹号:取反操作符,它将会反转命令的退出码的结果,也会反转测试操作符的意义
13、*星号:
- 用作通配符,可以用来做文件名匹配
- 也可以用在正则表达式中,用来匹配任意个数(包含0个)的字符
- 算数操作符,乘法运算,如果是求幂操作符,就使用**
14、?问号:
- 测试操作符,在一个特定的表达式中,用来测试一个条件的结果
- 在一个双括号结构中,?就类似C语言的三元操作符【(( t = a<45?7:11 ))】
- 在参数替换表达式中,用来测试一个变量是否被设置
- 可用来做匹配单个字符的通配符,在正则表达式中, 也是用来表示一个字符
15、$:
- 变量替换,在一个变量前面加上$用来引用这个变量的值
- 在正则表达式中,表示行结束符
16、${}:参数替换
17、$*, [email protected]:位置参数
18、$?:退出状态码变量,一个命令,一个函数,或者是脚本本身的退出状态码
19、$$:进程ID变量,保存了它所在脚本的进程 ID
20、()小括号:命令组,【(test=xixi ; echo $test)】,在小括号中的命令列表将会作为一个子shell来运行,父shell将不能够读取在子shell中创建的变量
21、(())双小括号:这用于扩展并计算在(( ))中的整数表达式
22、{}大括号:
- {
- echo "haha"
- echo "Archive Listing:"
- } > $file
- {read line1
- read line2
- } < $file
- 一个命令可能会对大括号中的以逗号分割的文件列表起作用,mkdir {haha,xixi},注意:在大括号中,不允许有空白,除非这个空白被引用或转义
- 大括号并命令括起来就组成代码块,实际上就是创建了一个匿名函数,与"标准"函数不同的是, 在其中声明的变量,对于脚本其他部分的代码来说必须是可见的(即不可使用local关键字)
- 代码块和I/O重定向:从一个文件中读取多个数据到多个变量
- 还能够将一个代码块的结果保存到文件
23、{} \;:标识路径名,一般都在find命令中使用,其中的";"是用来结束find命令序列的-exec选项
24、[]中括号:
- 可以是条件测试命令,是一个shell内建命令
- 在一个array结构的上下文中,中括号用来引用数组中每个元素的编号
- 可用作正则表达式的一部分,方括号描述一个匹配的字符范围
25、[[ ]]双中括号:也是条件测试命令
26、> &> >& >> < <>:重定向
27、(command)>,<(command):进程替换
28、<<:用在here document中的重定向
29、<<<:用在here string中的重定向
30、\<, \>:正则表达式中的单词边界,grep ‘\<what\>‘ textfile
31、|:管道.,分析前边命令的输出,并将输出作为后边命令的输入
32、>|:强制重定向
33、||:逻辑或
34、&&:逻辑与
35、&:如果在命令后面跟一个&,就表示在后台运行此命令,在脚本中,命令和循环都能够运行在后台中(注意:在一个脚本中,使用后台运行命令(&)可能会使这个脚本挂起,直到敲ENTER,挂起的脚本才会被恢复,一般只有在这个命令的结果需要输出到stdout的时候,这种现象才会出现)
36、-:
- 选项前缀
- 用于重定向stdin或stdout【(cd /data/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)】
- 表示上一次的工作目录
- 用于算术操作减号
37、+,=,%:算数运算符
38、~,~+,~-:home目录,当前工作目录,先前工作目录
39、=~:在双中括号测试表达式中使用的正则表达式匹配,[[ "$variable" =~ "T*fin*es*" ]]
-----参考《高级bash脚本编程指南》