BASH脚本语法汇集

2015-04-02  本文已影响91人  羽风之歌

特殊字符

#        注释.
;        命令分隔符,可以在同一行上写两个或两个以上的命令.
;;        终止case选项.
.        "点"命令等价于source命令.
         "点"作为文件名的一部分. 如果点放在文件名的开头的话, 那么这个文件将会成为隐藏文件,
         "点"字符匹配. "点"用来匹配任何的单个字符.
""       部分引用[双引号, 即"]. "STRING"将会阻止(解释)STRING中大部分特殊的字符.
''       全引用[单引号, 即']. 'STRING'将会阻止STRING中所有特殊字符的解释. 这是一种比使用"更强烈的形式.
,        逗号操作符. 逗号操作符链接了一系列的算术操作. 虽然里边所有的内容都被运行了,但只有最后一项被返回.
\        转义符[反斜线, 即\]. 一种对单字符的引用机制.
/        文件名路径分隔符[斜线, 即/],也可以用来作为除法算术操作符.
``       命令替换. 已逐渐被$()替代,后者更灵活,如可以嵌套等
:        空命令[冒号, 即:]. 也可以被认为与shell的内建命令true作用相同.
!        取反操作符[叹号, 即!].
*        通配符[星号, 即*]. *可以用来做文件名匹配,也可以用在正则表达式中, 用来匹配任意个数(包含0个)的字符.
         算术操作符. 在算术操作符的上下文中, *号表示乘法运算.
         如果要做求幂运算, 使用**, 这是求幂操作符.
?        测试操作符. 在一个特定的表达式中, ?用来测试一个条件的结果.
         在一个双括号结构中, ?就是C语言的三元操作符.
         在参数替换表达式中, ?用来测试一个变量是否被set了.
         通配符. ?在通配(globbing)中, 用来做匹配单个字符的"通配符".
$        变量替换(引用变量的内容).
         行结束符. 在正则表达式中, "$"表示行结束符.
${}      参数替换.
$*       位置参数
$@       同上.
$?       退出状态码变量. $?变量保存了一个命令, 一个函数, 或者是脚本本身的退出状态码.
$$       进程ID变量. 这个$$变量保存了它所在脚本的进程ID.
()       命令组.
{}       代码块,又被称为内部组, 这个结构事实上创建了一个匿名函数(一个没有名字的函数).
[]       条件测试.数组元素.用作正则表达式的一部分, 方括号描述一个匹配的字符范围.
[[]]     测试.
(())     整数扩展.
>
&>
>&
>>
<
<>       重定向.
<<       用在here document中的重定向.http://doc.linuxpk.com/doc/abs/here-docs.html#HEREDOCREF
<<<      用在here string中的重定向.
<
>        ASCII comparison.
\<
\>       正则表达式中的单词边界.
|        管道.
>|       强制重定向(即使设置了noclobber选项 -- 就是-C选项). 这将强制的覆盖一个现存文件.
||       或-逻辑操作.
&        后台运行命令.
&&       与-逻辑操作.
-        选项, 前缀.
         用于重定向stdin或stdout[破折号, 即-].
         先前的工作目录.
         减号. 减号属于算术操作.
=        等号. 赋值操作,"="也用来做字符串比较操作.
+        加号. 加法算术操作.某些命令内建命令使用+来打开特定的选项, 用-来禁用这些特定的选项.
%        取模. %也是一种模式匹配操作. 在BASH中,%number表示将后台编号为number的任务调度到前台执行。
~        home目录[波浪号, 即~].
~+       当前工作目录. 相当于$PWD内部变量.
~-       先前的工作目录. 相当于$OLDPWD内部变量.
=~       正则表达式匹配. 这个操作将会在version 3版本的Bash部分进行讲解.
^        行首. 在正则表达式中, "^"表示定位到文本行的行首.

文件测试

-e       文件存在.
-f       表示这个文件是一个一般文件.
-d       表示这是一个目录.
-b       表示这是一个块设备.
-c       表示这是一个字符设备.
-p       这个文件是一个管道
-s       文件大小不为零.
-L       这是一个符号链接
-S       表示这是一个socket
-t       文件(描述符)被关联到一个终端设备上.
         这个测试选项一般被用来检测脚本中的stdin([ -t 0 ]) 或者stdout([ -t 1 ])是否来自于一个终端.
-r       文件是否具有可读权限(指的是正在运行这个测试命令的用户是否具有读权限)
-w       文件是否具有可写权限(指的是正在运行这个测试命令的用户是否具有写权限)
-x       文件是否具有可执行权限(指的是正在运行这个测试命令的用户是否具有可执行权限)
-g       set-group-id(sgid)标记被设置到文件或目录上
-u       set-user-id (suid)标记被设置到文件上
-k       设置粘贴位
-O       判断你是否是文件的拥有者
-G       文件的group-id是否与你的相同
-N       从文件上一次被读取到现在为止, 文件是否被修改过
!        "非" -- 反转上边所有测试的结果(如果没给出条件, 那么返回真).

比较操作

参数替换

进程替换

>(command)
<(command)

变量定义

declare用法

-r        只读
-i         整型
-a         数组
-f         函数
-x export    这句将会声明一个变量, 并作为这个脚本的环境变量被导出.
-x var=$value    允许在声明变量类型的同时给变量赋值.

控制结构

上一篇下一篇

猜你喜欢

热点阅读