#
注释,行首以#开头为注释(#!是个例外)
; 命令分割符,可以用来在一行中写多个命令
;; 终止“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命令重新分配位置参数,其实就是向左移动一个位置
转载于:https://blog.51cto.com/wangyongcun/1407634