一个好的帮助信息对于快速、高效的使用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" ]]; thenhelpexit 1
fi

使用效果:

$ ./help.sh my-script — does one thing wellUsage:my-script <input> <output>Options:<input>   Input file to read.<output>  Output file to write. Use '-' for stdout.-h        Show this message.

————————————————
版权声明:本文为CSDN博主「奔跑的码仔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lhl_blog/article/details/107409694

shell脚本如何优雅的打印帮助信息相关推荐

  1. 如何在Shell脚本中漂亮地打印JSON?

    是否有(Unix)Shell脚本以易于理解的格式格式化JSON? 基本上,我希望它可以转换以下内容: { "foo": "lorem", "bar&q ...

  2. shell看java控制台_java - 为什么我的shell脚本的输出不能打印在控制台? - SO中文参考 - www.soinside.com...

    我试图用java在控制台打印一个shell脚本的输出.当我手动运行该脚本时,我得到C:/Users/user1/Desktop/shell.sh: line 78: /usr/ucb/ps: No s ...

  3. oracle同一个示例两个用户的数据同步_分享两个shell脚本--一键统计Oracle数据库用户信息...

    概述 今天主要分享一下两个shell脚本,主要是为了查看所有数据库用户及其表空间,统计某个指定用户的明细,下面一起来看看吧~ 数据库连接脚本 use script settdb.sh for DB l ...

  4. shell脚本实现分日志级别输出

    shell脚本如何优雅的记录日志信息,下面让我们一步一步,让shell脚本的日志也变得高端起来,实现如下功能 ①设定日志级别,实现可以输出不同级别的日志信息,方便调试 ②日志格式类似为:[日志级别] ...

  5. 【Shell系列】之shell脚本中常用句法

    环境:shell脚本 1.怎么打印grep后的变量 方法1 gp=`grep smthg <filename>` echo -n "$gp" 参考网址:https:// ...

  6. bash 与 shell脚本编写指南

    bash 与 shell脚本编写指南 bash 与 shell脚本编写指南 bash基本命令 man与info命令 遍历目录命令 文件与目录列表命令 处理文件相关命令 处理目录命令 查看文件内容 通过 ...

  7. Shell脚本加密方法大全及案例演示

    一.加密原因 当我们正式线上开发环境是基于Linux开发时,通常必不可少的就是shell脚本的编写. shell脚本的好处众多,可对系统进行自动化维护,简单,快捷而且可移植性强. 存在问题: 但是sh ...

  8. Shell脚本开发实战--工具篇

    一.产生背景 企业应用开发中,我们会经常和Linux服务器打交道,比如:Linux提交spark作业,查看作业日志,准备基础数据,调试与自测等:如果每次测试都重复那些操作就显得很业余了,我们想到的肯定 ...

  9. Linux系统shell脚本之打印系统的IP信息

    Linux系统shell脚本基础之打印系统的IP信息 一.脚本要求 二.脚本内容 三.执行脚本 一.脚本要求 1.显示服务器的运行状态,并输出提示 2.输出电脑的IP地址等信息 3.将执行输出的信息记 ...

最新文章

  1. DataList分页
  2. 使用Devstack部署neutron网络节点
  3. lucene使用3.0.3_Jirasearch 2.0狗粮:使用Lucene查找我们的Jira问题
  4. Ripro主题X系列站长素材下载网站模板
  5. DHCP 不同情况的操作
  6. Python XML解析
  7. 山石网科发布山石云·景产品 安全运维管理进入SaaS模式
  8. APACHE配置文件中文版 httpd.conf FOR Apache 2.2.4
  9. 电磁兼容性(EMC)标准EN55032IT设备要求
  10. python 安居客 爬虫_Python爬虫安居客房价信息(并利用百度地图API查询坐标)
  11. linux用独显运行steam,linux N卡 steam启动失败解决方案 (32位 库缺失)
  12. android怎样换背景图片,手机怎么抠图换背景 安卓和iPhone一键抠图换背景教程
  13. JavaGuide--Java篇
  14. Davids阅读笔记:《如何阅读一本书》
  15. Word 重复引用同一个脚注
  16. android销毁指定activity,Android - 销毁指定Activity
  17. 手机计算机表白公式,表白公式数学公式
  18. 深度系统deepin
  19. Omap4470 USB驱动分析之注册过程
  20. C/C++编程:注入类名

热门文章

  1. Net学习日记_ASP.Net_MVC_新语法笔记
  2. 这两年多我写PHP业务代码的方式是如何进化的
  3. Python自动化之列表
  4. Java和C++在细节上的差异(转)
  5. Qt 字符串QString arg()用法总结
  6. asp.net利用RAR实现文件压缩解压缩(转)
  7. jQuery教程10-表单元素选择器
  8. 浅学习使用Ribbon 和 Feign的理解和使用
  9. 使用SpringMVC模拟文件上传与下载案例
  10. 在php中创建三个表格,创建新工作表PHPExcel