[ Shell ] 用 while + case 实现 GetOptions 效果

https://www.cnblogs.com/yeungchie/

可以用 getopt,但我还是喜欢自己写这个过程,便于我控制更多细节。

下面要实现的效果是,从命令行参数中分析,给 $libName$cellName$viewName 三个变量赋值,

  • 分别通过选项来定义: --lib--cell--view
  • 同时也可以支持短选项来定义: -l-c-v
  • 设置参数默认值, $libName$cellName 默认值为 undef$viewName 默认值为 layout
  • -h 或者 --help 可以打印帮助内容

代码示例

#!/bin/bash
#--------------------------
Program  : getOptTemplate.sh
Language : Bash
Author   : YEUNGCHIE
Version  : 2022.08.13
#--------------------------
function HelpDoc {
定义一个函数, 方便写 help 信息
cat <&2
            exit 1
        ;;
        *)
            # 报错提示, 无效的 option
            echo "Invalid option - '$1'" >&2
            echo "Try -h or --help for more infomation." >&2
            exit 1
        ;;
    esac
    shift
done

分析结束
cat < $libName
Cell Name    --> $cellName
View Name    --> $viewName
EOF

exit 0

功能演示

  • 未定义参数的默认值
$ ./getOptTemplate.sh
Input arguments:
Library Name --> undef
Cell Name    --> undef
View Name    --> layout
  • 长选项和短选项
$ ./getOptTemplate.sh --lib OC1231 -c demo -v schematic
Input arguments:
Library Name --> OC1231
Cell Name    --> demo
View Name    --> schematic
  • 错误参数名的报错
$ ./getOptTemplate.sh -library OC1231
Invalid option - '-library'
Try -h or --help for more infomation.

  • 打印 help
$ ./getOptTemplate.sh -h
Usage:
-l, --lib     Library Name
-c, --cell    Cell Name
-v, --view    View Name

Original: https://www.cnblogs.com/yeungchie/p/16027490.html
Author: YEUNGCHIE
Title: [ Shell ] 用 while + case 实现 GetOptions 效果

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/583016/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis Cluster 介绍与使用

    Redis Cluster 功能特性 Redis 集群是分布式的redis 实现,具有以下特性: 1. 高可用性与可线性扩张到1000个节点 2. 数据自动路由到多个节点 3. 节…

    Linux 2023年5月28日
    0104
  • Mybatis源码解读-SpringBoot中配置加载和Mapper的生成

    本文 mybatis-spring-boot探讨在springboot工程中mybatis相关对象的注册与加载。 建议先了解mybatis在spring中的使用和springboo…

    Linux 2023年6月7日
    0114
  • git的 .gitignore 配置概述

    学习背景:自己在使用git时发现有时会上传很多无用的配置文件,或者在项目中已经包含一个本地的git仓库,导致上一级项目上传总是报错,所以学习采用gitignore配置忽略包含的子项…

    Linux 2023年6月13日
    077
  • 读书笔记:CSAPP 11章 网络编程

    深入理解计算机系统 第11章 本章代码:Index of /afs/cs/academic/class/15213-f15/www/code/22-netprog2其中包含本章课本…

    Linux 2023年6月13日
    0100
  • spring-data-redis 2.0 的使用

    在使用Spring Boot2.x运行Redis时,发现百度不到顺手的文档,搞通后发现其实这个过程非常简单和简洁,觉得有必要拿出来分享一下。 Spring Boot2.x 不再使用…

    Linux 2023年5月28日
    0118
  • Servlet 学习总结

    Servlet学习笔记 Servlet学习 学习视频为:https://www.bilibili.com/video/BV1Ta4y1H7Vc IDEA的使用 IDEA的简介 ID…

    Linux 2023年6月7日
    063
  • 2021年3月-第02阶段-前端基础-移动WEB开发-移动WEB开发之_响应式布局

    移动端WEB开发之响应式布局 1.0 响应式开发原理 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。 设备的划分情况: 小…

    Linux 2023年6月8日
    0118
  • Haproxy

    Haproxy Haproxy haproxy简介 负载均衡 Haproxy搭建http负载均衡 lvnanhai、RS1、RS2都关闭防火墙和selinux RS1和RS2部署h…

    Linux 2023年6月6日
    0100
  • Python中使用 for 循环来拿遍历 List 的值

    常规版本 简单的 for 循环遍历 x_n = ["x1","x2","x3"] for x in x_n: print…

    Linux 2023年6月7日
    086
  • Linux——基础命令用法(上)

    一、Linux基础命令 1、Linux命令的语法 一条完整的Linux命令的组成部分: 命令 选项 参数 命令:是某个具体的功能 选项:是对函数的修改(通常以-开头,-表示选项的短…

    Linux 2023年5月27日
    086
  • Emacs 基础offset值

    cc-mode有如下规定:One of the symbols +, -, ++, –, *, or /These special symbols describe a…

    Linux 2023年6月13日
    088
  • cobbler的部署

    cobbler部署 //配置yum源 [root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://m…

    Linux 2023年6月13日
    090
  • ThinkPHP5 远程命令执行漏洞

    一、ThinkPHP介绍 轻量级框架,内部OOP和面向过程代码都存在,是国人自己开发的框架。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,…

    Linux 2023年6月14日
    078
  • 测试计划

    ​ 1.测试计划的定义:描述需要完成的所有工作,包括被测项目的目的、背景、范围、资源、进度、环境、任务、策略,以及相应的风险和措施。 ​ 2.测试计划的作用: 对后面的测试过程起到…

    Linux 2023年6月7日
    077
  • 一文说清OpenCL框架

    背景 Read the fucking official documents! –By 鲁迅 A picture is worth a thousand words. …

    Linux 2023年6月8日
    0115
  • 001.IT运维面试问题-Linux基础

    Redhat、CentOS、Fedora、SuSE、Debian、Ubuntu、FreeBSD等。 ⑴开机BIOS自检,加载硬盘。 ⑵读取MBR,MBR引导。 ⑶grub引导菜单(…

    Linux 2023年6月13日
    0103
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球