#   注释,行首以#开头为注释(#!是个例外)
  命令分割符,可以用来在一行中写多个命令
;;  终止“case”选项
.     相当于source命令,这是一个bash内建命令
.     作为文件名的一部分,如果作为文件名的前缀的话,那么这个文件将成为隐藏文件
.     如果作为目录名字的一部分的话,表示的是当前目录“..” 表示上一级目录
.     命令经常作为一个文件移动命令的目的地
.      字符匹配。这是作为正则表达式的一部,用来匹配任何的单个字符
"     部分引用“STRING”阻止了一部分特殊字符
    全引用,'STRING'阻止了全部特殊字符
,     逗号链接了一系列的算术操作,虽然里边所有的内容都被运行了,但只有最后一项被返回
\     转义字符,如\X等价于“X”或者'X'
/     文件名路径分隔符或者用来做除法操作
``     后置引用,命令替换
:     空命令,等价于“NOP”(no op,一个什么也不干的命令),也可以被认为与shell的内建命令(true)作用相同
    “:” 命令是一个bash的内建命令,它的返回值为0,就是shell返回的true
      死循环,如
    while :
    do
         operation-1
         operation-2
         operation-3
         ...
         operation-n
    done
    与下面方式相同
    while true
         do
                   ...
         done
    在if/then中的占位符,如:
    if condition
    then :   # 什么都不做,引出分支
    eles
              take-some-action
    fi
    "变量扩张/字串替换" 在和>结合使用时,把一个文件截断到0长度,没有修改它的权限,如果文件在之前不存在,那么就创建它。
    :> date.xxx  #文件“data.xxx”现在被清空了,与 cat /dev/null > data.xxx的作用相同
     然而,这不会产生一个新的进程,因为“:”是一个内建命令
    取反操作符,将反转“退出状态”结果,也会反转test操作符的意义,比如修改=为!=.!操作室bash的一个关键词
        在另一种上下文种,还能反转bash的“history mechanism” history mechanism(历史机制)在脚本中是被禁用的
*     万能匹配字符,用于文件名匹配(这个东西有一个专有名词叫file globbing)
       数学乘法  **是幂运算
    测试操作,在一个确定的表达式中,用?来测试结果
       在file globbing 中和正则表达式中一样匹配任意的单个字符
$     变量替换,变量赋值前后不要有空格  ; 在正则表达式中作为行结束符
$0      是脚本本身, $1是第一个参数····
$()     参数替换
$*,$@     所有的位置参数(不包含$0)
$?     退出状态变量. $?保存一个命令/一个函数或者脚本本身的退出状态
$$     进程ID变量,这个$$变量保存运行脚本进程ID
()      命令组 , 注意:在()中的命令列表,将作为一个子shell来运行,在()中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的
{}     代码块,又被称为内部组,与()不同的是{}中的代码块不能正常的开启一个新的shell
{}\;     路径名,一般都在find命令中使用,这不是一个shell内建命令,注意:“;”用来结束find命令序列的-exec选项
[ ]      test
         test的表达式将在[]中,值得注意的是[]是shell内建test命令的一部分,并不是/usr/bin/test 中的扩展命令的一个连接
` ` test
         test表达式放在[[]]中 .(shell关键字)
[ ]     数组元素
[ ]     字符范围
(())     数学计算的扩展
>&>>&>><      重定向
    scriptname > filename     重定向脚本的输出到文件中,覆盖原有内容
    command &> filename     重定向stdout 和 stderr 到文件中
    command >&2 重定向command 的 stdout 到  stderr
    scriptname >> filename 重定向脚本的输出到文件中,添加到文件尾端,如果没有文件就创建文件
<,>     ASCII 比较
\<,\>     正则表达式中的单词边界。如:grepm '\<the\>' testfile
|     管道,分析前边命令的输出,并将输出作为后面命令的输入,如果管道中的某个命令产生了一个异常,并且中途失败,那么这个
                管道将提前终止,这种行为被叫做a broken pipe,并且这种状态下将发送一个SIGPIPE(信号)
>|     强制重定向(即使设置了noclobber选项--就是-C选项),这将强制覆盖一个现有文件
||     或-逻辑操作
&     后台运行命令,一个命令后面跟一个&,将表示在后台运行
         sleep 10 &
         [1]850
         [1]+   Done               sleep 10
         在一个脚本中,命令和循环都可能运行在后台
        注意:在一个脚本内运行后台执行一个命令,有可能造成这个脚本挂起,等待一个按键响应
&&     与-逻辑操作   command1 && command2 如果1执行成功则执行2  
-          选项,前缀,在所有命令内如果想使用选项参数的话,前面都要加’-‘
~          home目录  ~/就相当于当前用户的home目录
~+        当前工作目录,相当于$pwd变量
~-          之前的工作目录,相当于$oldpwd内部变量
=~          用于正则表达式
^          行首符
空白部分
         分割命令或者是变量,包括空格,tab,空行,或任何他们的组合
         在一些特殊情况下,空白是不允许的,如变量赋值时,会引起语法错误
         空白行在脚本中没有效果
         “$IFS”,对于某些命令输出的特殊变量分割域,默认使用的是空白
         如果想保留空白,使用引用
换行符也被认为是空白,这也解释了为什么一个空行是空白
shift     shift命令重新分配位置参数,其实就是向左移动一个位置