shell脚本帮助信息

933 阅读1分钟

怎样为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