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

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

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

  • 分别通过选项: --lib--cell--view 来定义
  • 同时也可以支持短选项:-l-c-v 来定义
  • 如果存在没有定义的参数,则 $ib$cell 使用默认值 undef$view 默认值 layout
  • -h 或者 --help 可以打印帮助内容

code

#!/bin/bash
#--------------------------
# Program : getOptTemplate.sh
# Language : Bash
# Author : YEUNGCHIE
# Version : 2022.03.19
#--------------------------
function help {
# 定义一个函数, 写 help 信息
cat <<EOF
Usage:
-l, --lib Library Name
-c, --cell Cell Name
-v, --view View Name
EOF
} # 这里开始分析输入参数
while [[ -n $1 ]]; do
if [[ -n $optType ]]; then
case $optType in
# 根据 optType 来决定给什么变量赋值
lib_opt) libName=$1 ;;
cell_opt) cellName=$1 ;;
view_opt) viewName=$1 ;;
esac
# 赋值完了把 optType 复原
unset optType
else
case $1 in
# -短选项|--长选项) optType='起个名字' ;;
-l|--lib) optType='lib_opt' ;;
-c|--cell) optType='cell_opt' ;;
-v|--view) optType='view_opt' ;;
-h|--help)
# 打印 help 后退出
help >&2
exit 1
;;
*)
# 报错提示, 未知的 option
echo "Invalid option - '$1'" >&2
echo "Try -h or --help for more infomation." >&2
exit 1
;;
esac
fi
# 把命令行接受的参数列表的元素往前移一位
shift
done
# 分析结束 if [[ ! -n $libName ]]; then libName=undef ; fi
if [[ ! -n $cellName ]]; then cellName=undef ; fi
if [[ ! -n $viewName ]]; then viewName=layout; fi cat <<EOF
Input arguments:
Library Name --> $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

[ Shell ] 两个 case 实现 GetOptions 效果的更多相关文章

  1. 03 shell编程之case语句与函数

    本文所有内容均来自当年博主当年学习笔记,若有不足欢迎指正 Shell编程之case语句与函数 学习目标: 掌握case语句编程 掌握shell函数的使用 目录结构: Case语句 Case语句的作用 ...

  2. Linux Shell系列教程之(十三)Shell分支语句case … esac教程

    本文是Linux Shell系列教程的第(十三)篇,更多Linux Shell教程请看:Linux Shell系列教程 分支语句非常实用,基本上高级语言都支持分支语句(python 没有),大多数都使 ...

  3. shell for循环+case的脚本(监控程序状态)

    分享一个shell for循环+case的脚本(监控程序状态) 分享一个for循环+case的脚本(监控程序状态并执行相关操作) ,供大家学习参考. 复制代码代码如下: #/bin/bash set ...

  4. 横竖两个数字塔的效果BAT批处理怎么写?

    横竖两个数字塔的效果BAT批处理怎么写?@echo offfor /l %%a in (0,1,1) do (        for /l %%i in (0,1,9) do (        for ...

  5. shell脚本中case的用法

    shell脚本中case选择语句可以结合read指令实现比较好的交互应答操作,case接收到read指令传入的一个或多个参数,然后case根据参数做选择操作. case的语法如下 case $char ...

  6. shell编程之case分支语句

    shell编程之case分支语句 case分支语句和if的多分支语句很相似. if多分支语句一般用在有(区间范围)的地方 :例如:0-100之间. if需要判断多个不同的条件. case的分支语句用在 ...

  7. python实现基于两张图片生成圆角图标效果的方法

    python实现基于两张图片生成圆角图标效果的方法 这篇文章主要介绍了python实现基于两张图片生成圆角图标效果的方法,实例分析了Python使用pil模块进行图片处理的技巧,分享给大家供大家参考. ...

  8. python如何实现像shell中的case功能

    我们知道在shell脚本里是支持case语句,当位置参数为空时,会提示我们怎么使用脚本 那么在python怎么实现呢?也使用case吗? python里不支持case语句,但是也有实现case的方法. ...

  9. OC可点击的两种轮播图效果

    基本上,每一个APP都有一个轮播图的效果展示,一般都是用来展示图片的一些信息,然后可以点击查看或购买,所以在此我将这种轮播图进行了一个类的封装,效果包含两种形式:第一种,来回轮转样式,第二种,一个方向 ...

随机推荐

  1. 定制博客CSS样式

    首先你需要添加页面CSS代码

  2. 痞子衡嵌入式:i.MXRT连接特殊Octal Flash时(OPI DTR模式下反转字节序)下载与启动注意事项(以MX25UM51245为例)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是OPI DTR模式下反转字节序的Octal Flash在i.MXRT下载与启动注意事项. 在恩智浦官方参考设计板 MIMXRT595-E ...

  3. 今天带大家了解一下ICMP协议及基本使用

    ICMP协议的介绍及基本使用 1.IP数据包头的格式 2.ICMP协议的功能介绍 3.ICMP的基本使用方法 1.在讲解ICMP协议之前,我们先来简单了解一下IP数据包格式如图所示: 2.好现在切入正 ...

  4. mysql表查询、多表查询(增强查询的使用)子查询、合并查询,外连接,mysql5种约束,自增长

    一.查询加强 1.在mysql中,日期类型可以直接比较,需要注意格式 2.%:表示0到多个字符, _:表示单个字符 exp:显示第二个字符为大写O的所有员工的姓名和工资 select  name fr ...

  5. Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (default-test) on project gulimall-common: There are test failures.

    对Maven打包时碰见的问题: Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test (d ...

  6. DelayQueue延迟队列-实现缓存

    延迟阻塞队列DelayQueue DelayQueue 是一个支持延时获取元素的阻塞队列, 内部采用优先队列 PriorityQueue 存储元素, 同时元素必须实现 Delayed 接口:在创建元素 ...

  7. 6U VPX i7 刀片计算机

    一.产品概述 该产品是一款基于第三代Intel i7双核四线程(或四核八线程)的高性能6U VPX刀片式计算机.产品提供了可支持全网状交换的高速数据通道,其中P1,P2各支持4个PCIe x4 Gen ...

  8. 基于myscript.js的web手写板(支持中文识别)

    网上的手写板模板不少,但是支持中文识别的却不多,而且基本上都收费的,毕竟别人的中文库凭什么免费提供给你(说好的开源呢?说好的开源呢? ←_←) 好了,进入主题,myscript.js,在官网其实我并没 ...

  9. 五、MyBatis缓存初体验

    缓存就是内存中的数据,常常来自对数据库查询结果的保存,使用缓存, 我们可以避免频繁的与数据库进行交互, 进而提高响应速度. 一级缓存初体验(session,默认打开) 同一查询执行两次以上:selec ...

  10. sql server通过T-SQL导出Excel到磁盘

    ALTER PROCEDURE [dbo].[pro_ImportExcelByTime] AS BEGIN --第一步,开启高级功能 EXEC sp_configure 'show advanced ...