1. 命令的退出状态 (1),(kw: EXIT STATUS)
每一个命令都有一个退出状态,用一个非负的整数表示
状态码0 表示命令运行没有出错
非零状态码表示命令出错
状态码的范围是0-255
2. 条件表达式 (2),(kw: CONDITIONAL EXPRESSIONS)
复合命令 [[,内部命令 test 和 [,使用条件表达式来测试文件的属性和状态,做字符串比较和算术比较。
形式一:[[ expression ]] 支持正则 [[ good =~ ^g ]]
形式二: [ expression ]
形式三: test expression
逻辑操作符,按优先级从高到低:
!: 非
-a: 与
-o: 或
获取帮助信息:help [[,help test
3. 流程控制 (2),(kw: Compound Commands)
if COMMANDS; then
COMMANDS
elif COMMANDS; then
COMMANDS
else
COMMANDS
fi
获取帮助 help if
case case只能等于变量
case 语句也是分支语句,在需要做多条件判断的场合可以替代if语句,是得代码更加简洁
case $word in
pattern1) COMMANDS;;
pattern2) COMMANDS;;
*) COMMANDS;;
esac
获取帮助 help case
while 语句用于循环结构,只要条件判断命令返回0,循环都会一直执行
while COMMANDS
do
COMMANDS
done
获取帮助: help while
for 用于循环结构,每次循环时依次从列表中取一个字符串,当无法从列表中再取到字符串时,循环终止
for NAME in WORDS
do
COMMANDS
done
获取帮助信息:help for
例如:
遍历文件名/字符串
continue,break
continue命令终止当次循环,开始下一轮循环
break敏两个终止整个循环结构
help continue,help break
4. 函数 (2),(kw: FUNCTIONS)
可以把函数想象成脚本中的小脚本。
1. 代码重用
2. 接受参数
3. 有返回值
4. local命令设定只在函数内部使用的变量
6. 位置参数$0与脚本的$0相同
6. 函数库与source 命令
7. export 导出函数给子shell使用
5. 信号 (1),(kw: SIGNALS)
信号是进程间通信的一种方式
1. kill命令给进程发信号
2. trap命令捕捉信息 SIGKILL和SIGSTOP无法捕捉,未捕捉的信息通常会使进程终止
CTRL-C <-- 给前台进程组发SIGINT
CTRL-Z <-- 给前台进程组发SIGTSTP
CTRL-\ <-- 给前台进程组发SIGQUIT
CTRL-D <-- 输出一个EOF 字符
6. 文本处理 (4)
1. 常用文本处理命令:
cat head tail grep sed awk
cut wc sort uniq tr tac rev
2. 正则表达式常用于文本处理中,支持做更复杂,更高效的文本处理操作
3. 文本处理性能比较
1. 搜索
2. 替换
3. 截取
调试代码:bash -x
托管代码:git
locate -c -m
7. 实例讲解 (6)
1. 脚本范例解析
2. 脚本书写
1. 命令行参数处理
2. 运行环境检查(权限,标记等)
3. 规范错误码
4. 记录日志
5. 模块化编程 (函数,变量)
7. 代码注释
1. 内部命令与外部命令的选择
2. 并发,等待,同步 (flock)
9. 代码调试 (bash -x,bash -n)
10. 版本管理 (git,svn,cvs)
3. 项目示范
写一个程序,实现以下功能
1. 检查远程服务器上的httpd 服务是否正常工作,
并记录检查结果
4. 避免多个进程同时写检查记录,
如果出现写冲突,
应该返回相应的错误码
5. 除了记录检查记录之外,程序还应该对每次运行,
每次错误做记录