第1 章 为什么使用shell 编程
第2 章 带着一个Sha-Bang 出发(Sha-Bang 指的是#!)
第3 章 特殊字符
# 注释,行首以#开头为注释(#!是个例外).
; 命令分隔符,可以用来在一行中来写多个命令.
;; 终止"case"选项.
1 case "$variable" in
2 abc) echo "\$variable = abc" ;;
3 xyz) echo "\$variable = xyz" ;;
4 esac
. .命令等价于source 命令(见Example 11-20).这是一个bash 的内建命令.
. .作为文件名的一部分.如果作为文件名的前缀的话,那么这个文件将成为隐藏文件.
将不被ls 命令列出.
. .字符匹配,这是作为正则表达是的一部分,用来匹配任何的单个字符.
" 部分引用."STRING"阻止了一部分特殊字符,具体见第5 章.
' 全引用. 'STRING' 阻止了全部特殊字符,具体见第5 章.
, 逗号链接了一系列的算术操作,虽然里边所有的内容都被运行了,但只有最后一项被
返回
\ 转义字符,如\X 等价于"X"或'X',具体见第5 章
/ 文件名路径分隔符.或用来做除法操作.
: 空命令,等价于"NOP"(no op,一个什么也不干的命令).也可以被认为与shell 的内建命令(true)作用相同.":"命令是一个bash 的内建命令,它的返回值为0,就是shell 返回的true
! 取反操作符,将反转"退出状态"结果,(见Example 6-2).也会反转test 操作符的意义.比如修改=为!=.!操作是Bash 的一个关键字.在一个不同的下文中,!也会出现在"间接变量引用"见Example 9-22.在另一种上下文中,!还能反转bash 的"history mechanism"(见附录J 历史命令)需要注意的是,在一个脚本中,"history mechanism"是被禁用的.
* 万能匹配字符,用于文件名匹配(这个东西有个专有名词叫file globbing),或者是正则表达式中.注意:在正则表达式匹配中的作用和在文件名匹配中的作用是不同的.
bash$ echo *
abs-book.sgml add-drive.sh agram.sh alias.sh
* 数学乘法.**是幂运算.
? 在file globbing 中和在正则表达式中一样匹配任意的单个字符.
$ 变量替换
$ 在正则表达式中作为行结束符.
${} 参数替换,见9.3 节.
$*,$@ 位置参数
$? 退出状态变量.$?保存一个命令/一个函数或者脚本本身的退出状态.
$$ 进程ID 变量.这个$$变量保存运行脚本进程ID
() 命令组
{} 代码块.又被称为内部组.事实上,这个结构创建了一个匿名的函数.但是与函数不同的是,在其中声明的变量,对于脚本其他部分的代码来说还是可见的