打印脚本帮助文档,获取参数
getopts
用法肯定是很多的,这里就说一个最常用的、简单的命令
$ cat threeOptions.sh
#!/bin/bash
while getopts ":A:B:C:" opt; do
case $opt in
A) echo "The argument for the option A is $OPTARG" ;;
B) echo "The argument for the option B is $OPTARG" ;;
C) echo "The argument for the option C is $OPTARG" ;;
?) echo "Unknown Option"
exit 1 ;;
esac
done
shift "$(($OPTIND -1))"
# In the script threeOptions.sh, we’ve used getopts to parse options and their arguments.
$ echo "Tom Likes Jerry" | xargs bash -c './threeOptions.sh -A $2 -B $1 -C $0'
The argument for the option A is Jerry
The argument for the option B is Likes
The argument for the option C is Tom
自定义 help 函数
参考: shell脚本如何优雅的打印帮助信息
shell中一般#开头的行为注释信息,所以利用这个特性,我们可以把帮助信息设计成如下的样式:
#!/usr/bin/env bash
### Usage:
### my-script <input> <output>
###
### Options:
### <input> Input file to read.
### <output> Output file to write. Use '-' for stdout.
### -h Show this message.
然后,编写一个help函数完成帮助信息打印:
help() {
sed -rn 's/^### ?//;T;p;' "$0"
}
编写help的调用逻辑,即直接调用脚本,或者使用-h选项:
if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then
help
exit 1
fi
这里用到了sed这个工具,sed是类Unix系统中十分强大的流编辑工具,关于sed的更多的使用方式,请man sed。关于help中的sed使用到的参数解释如下:
- “$0”:表示脚本的文件名,例如,help.sh
- -r:表示使用扩展的正则表达式
- -n:表示打印sed匹配到的信息
- s:使用sed的替换模式
- ^### ?:表示匹配以###和若干个空格开头的字符串
- //:用空字符替换之前匹配到的字符串
- T:如果s///没有替换成功,跳转到sed-script的末尾
- p:打印替换结果