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 分支结构语句,根据条件判断命令的返回值选择运行的代码
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命令设定只在函数内部使用的变量
5. return 退出函数
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. 模块化编程 (函数,变量)
6. 代码对齐与代码风格
7. 代码注释
8. 代码性能
1. 内部命令与外部命令的选择
2. 并发,等待,同步 (flock)
9. 代码调试 (bash -x, bash -n)
10. 版本管理 (git, svn, cvs)
3. 项目示范
写一个程序,实现以下功能
1. 检查远程服务器上的httpd 服务是否正常工作,
并记录检查结果
2. 提供增加,查看,修改,删除的功能
3. 只有root 用户才能写入检查记录,其他人可以查询
4. 避免多个进程同时写检查记录,
如果出现写冲突,
应该返回相应的错误码
5. 除了记录检查记录之外,程序还应该对每次运行,
每次错误做记录
原文地址:http://blog.51cto.com/395469372/2097439