注释. 行首以#(#!是个例外)开头是注释.
;
命令分隔符. 可以在同一行上写两个或两个以上的命令.
;;
终止case选项
.
"点"命令. 等价于source命令. 这是一个bash的内建命令.
"点"作为文件名的一部分. 如果点放在文件名的开头的话, 那么这个文件将会成为"隐藏"文件.
如果作为目录名的话, 一个单独的点代表当前的工作目录, 而两个点表示上一级目录.
"点"字符匹配. 当用作匹配字符的作用时, 通常都是作为正则表达式的一部分来使用, "点"用来匹配任何的单个字符.
"
部分引用. "STRING" 将会阻止(解释) STRING 中大部分特殊的字符.
'
全引用. 'STRING'将会阻止 STRING 中所有特殊字符的解释. 这是一种比使用"更强烈的形式.
,
逗号操作符. 逗号操作符链接了一系列的算术操作. 虽然里边所有的内容都被运行了,但只有最后一项被返回.
\
转义符. 一种对单字符的引用机制.
\X 将会"转义"字符 X . 这等价于 "X" , 也等价于'X' . \通常用来转义"和', 这样双引号和但引号就不会被解释成特殊含义了.
`
命令替换. `command`结构可以将命令的输出赋值到一个变量中去.
:
死循环:空命令. 等价于"NOP" ( no op , 一个什么也不干的命令). 也可以被认为与shell的内建命令true作用相同. ":"命令是一个bash的内建命令, 它的退出码(exitstatus)是"true"(0).
: echo $? #0
while :
do
operation-1
operation-2
...
operation-n
done
# 与下边相同:
#while true
#do
# ...
#done
在if/then中的占位符:
if condition
then : # 什么都不做,引出分支.
else
take-some-action
fi
!
取反操作符. !操作符将会反转命令的退出码的结果. 也会反转测试操作符的意义.!操作符是Bash的关键字.
*
通配符. *可以用来做文件名匹配(专有名词globbing)的"通配符".含义是, 可以用来匹配给定目录下的任何文件名.
*也可以用在正则表达式中, 用来匹配任意个数(包含0个)的字符.
?
测试操作符. 在一个特定的表达式中, ?用来测试一个条件的结果
$
变量替换(引用变量的内容).
${}
参数替换.
$*,$@
位置参数.
$?
退出状态码变量. $? 变量 保存了一个命令, 一个函数, 或者是脚本本身的退出状态码.
$$
进程ID变量. 这个$$ 变量 保存了它所在脚本的进程 ID
()
命令组.
初始化数组
Array=(element1 element2 element3)
{xxx,yyy,zzz,...}
大括号扩展.
cat {file1,file2,file3} > combined_file # 把file1, file2, file3连接在一起, 并且重定向到combined_file中. cp file22.{txt,backup} # 拷贝"file22.txt"到"file22.backup"中
一个命令可能会对大括号中的以逗号分割的文件列表起作用. (通配(globbing))将对大括号中的文件名做扩展.*在大括号中, 不允许有空白, 除非这个空白被引用或转义.
Array[1]=slot_1 echo ${Array[1]}
[ ]
条件测试
[[ ]]
测试.
(( ))
整数扩展.扩展并计算在(( ))中的整数表达式.
>, &>, >&, >>, <. <>
重定向.
scriptname >filename重定向 scriptname 的输出到文件 filename 中. 如果 filename 存在的话, 那么将会被覆盖.
command &>filename重定向 command 的 stdout 和 stderr 到 filename 中.
command >&2重定向 command 的 stdout 到 stderr 中.
scriptname >>filename把 scriptname 的输出追加到文件 filename 中. 如果 filename 不存在的话,将会被创建.
<<
用在here document中的重定向.
<<<
用在here string中的重定向.
<, >
ASCII comparison.
\<, \>
正则表达式中的单词边界 .
|
管道. 分析前边命令的输出, 并将输出作为后边命令的输入. 这是一种产生命令链的好方法.
cat $filename1 $filename2 | grep $search_word
>|
强制重定向(即使设置了noclobber选项 -- 就是-C选项). 这将强制的覆盖一个现存文件.
||
或-逻辑操作. 在一个条件测试结构中, 如果条件测试结构两边中的任意一边结果为true的话,||操作就会返回0(代表执行成功).
&
后台运行命令. 一个命令后边跟一个& 表示在后台运行.
与-逻辑操作. 在一个条件测试结构中, 只有在条件测试结构的两边结果都为true的时候, &&操作才会返回0(代表sucess).
-
选项, 前缀. 在所有的命令内如果想使用选项参数的话,前边都要加上"-"
=
等号. 赋值操作
~
home目录[波浪号, 即~]. 相当于$HOME内部变量.
~+
当前工作目录. 相当于$PWD内部变量.
~-
先前的工作目录. 相当于$OLDPWD内部变量.
=~
正则表达式匹配.
^
行首. 在正则表达式中, "^"表示定位到文本行的行首.
*
算术操作符. *号表示乘法运算.如果要做求幂运算, 使用**, 这是求幂操作符.
?
通配符. ?在通配(globbing)中, 用来做匹配单个字符的"通配符", 在正则表达式中, 也是用来表示一个字符.
$
在一个变量前面加上$用来引用这个变量的值 .
$
行结束符. 在正则表达式中, "$"表示行结束符.
()
在 括号 中的命令列表, 将会作为一个子shell来运行.
初始化数组.
{} \;
路径名. 一般都在find命令中使用. 这不是一个shell内建命令.
";"用来结束find命令序列的 -exec 选项. 它需要被保护以防止被shell所解释.
|
管道是进程间通讯的一个典型办法, 将一个进程的 stdout 放到另一个进程的 stdin 中. 标准的方法是将一个一般命令的输出, 比如cat或者echo, 传递到一个 "过滤命令"(在这个过滤命令中将处理输入)中, 然后得到结果.
&&
用于重定向 stdin 或 stdout .