怎样为shell脚本写帮助信息?例如,我们可能已经忘记一个月前写的shell脚本的用途以及使用方法
这里有个可用案例,在shell脚本的最上方,将 "帮助信息" 和执行脚本的要求、参数,统一写在###后。如下所示
#!/bin/bash
###
### my-script -- does one thing well
###
### Usage:
### my-script <input> <output>
###
### Options:
### <input> Input file to read.
### <output> Output file to write. Use '-' for stdout.
### -h Show this message.
好,完成了一半,接着使用sed获取这些信息
help() {
sed -rn 's/^### ?//;T;p' "$0"
}
sed选项
- -r 支持扩展正则表达式
- -n 只显示匹配行,否则会打印文件所有内容
sed命令实现了这些功能:
- s 表示替换接下来的模式
- / 模式开始或结束的标志
- ^### ? 注意#和?之间有一个空格,匹配以###开始并且###后面跟着一个可选的空格的字符串
- // 将匹配的字符串替换为空字符串,//中间也可以放一些别的要替换的内容
- T 跳到匹配的模式后,即删除"###" 或"### "
- p 打印匹配行
- $0 脚本文件
最后,当脚本没有参数或参数为"-h"时调用help函数
if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then
help
exit 1
fi
完整脚本
#!/bin/bash
###
### my-script -- does one thing well
###
### Usage:
### my-script <input> <output>
###
### Options:
### <input> Input file to read.
### <output> Output file to write. Use '-' for stdout.
### -h Show this message.
help() {
sed -r 's/^### ?//;T;p' "$0"
}
if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then
help
exit 1
fi