shell脚本如何优雅的打印帮助信息

一个好的帮助信息对于快速、高效的使用shell脚本是非常有好处的。我们一般通过echo来逐行打印帮助信息,这种方式一个明显的缺点就是需要手动去进行排版,而排版的过程有时十分的繁琐。有没有想过,如果可以像写一般的注释一样来完成帮助信息的编写,那该多好啊!本文通过sed这个工具来实现,像写注释一样写shell的帮助信息。

shell中一般#开头的行为注释信息,所以利用这个特性,我们可以把帮助信息设计成如下的样式:

#!/usr/bin/env 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函数完成帮助信息打印。

help() {
    sed -rn 's/^### ?//;T;p;' "$0"
}

这里用到了sed这个工具,sed是类Unix系统中十分强大的流编辑工具,关于sed的更多的使用方式,请man sed。关于help中的sed使用到的参数解释如下:

  • “$0”:表示脚本的文件名,例如,help.sh
  • -r:表示使用扩展的正则表达式
  • -n:表示打印sed匹配到的信息
  • s:使用sed的替换模式
  • ^### ?:表示匹配以###和若干个空格开头的字符串
  • //:用空字符替换之前匹配到的字符串
  • T:如果s///没有替换成功,跳转到sed-script的末尾
  • p:打印替换结果

编写help的调用逻辑,即直接调用脚本,或者使用-h选项。

if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then
	    help
	    exit 1
fi

使用效果:

$ ./help.sh 

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.
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值