Shell脚本中使用getopts处理多命令行选项

当我们在编写Shell脚本时,通常需要从命令行中获取参数和选项。在Unix和Linux系统中,有一个非常强大的工具可以用来解析和处理命令行选项,那就是getopts。getopts是一个内置的命令行解析工具,可以快速处理多个选项和参数。

getopts基本语法

getopts的基本语法如下:

while getopts "options" opt; do
    case ${opt} in
        o ) #处理选项 o
            ;;
        a ) #处理选项 a
            ;;
        ? ) #处理无法识别的选项
            ;;
    esac
done
  • "options"是一个由选项字符组成的字符串,表示要处理的选项,每个选项字符前面可以加冒号":"表示这个选项需要附加参数;
  • opt是当前解析到的选项字符;
  • case语句用来根据opt处理不同的选项。

示例1:处理不带参数的选项

比如我们有一个脚本需求需要支持以下三个选项:

  • -h:显示帮助;
  • -v:显示版本号;
  • -d:输出调试信息。
#!/bin/bash
while getopts "hvd" opt; do
    case ${opt} in
        h ) 
            echo "Usage: command [-hvd] [arguments]"
            echo "Options:"
            echo "  -h: Display help message."
            echo "  -v: Display version number."
            echo "  -d: Turn on debugging information."
            exit 0 ;;
        v ) 
            echo "Version 1.0"
            exit 0 ;;
        d ) 
            shift #取下一个参数作为debug选项的值
            echo "Debug mode is on. Value: $1"
            break ;;
        \? ) 
            echo "Invalid option: -$OPTARG" 1>&2
            exit 1 ;;
        : )
            echo "Option -$OPTARG requires an argument." 1>&2
            exit 1 ;;
    esac
done

在上面的代码中,我们使用了shift命令将选项参数从命令行中删除,并把它赋值给$1变量,然后在下面的代码中就可以使用$1.

示例2:处理带参数的选项

现在我们需要实现一个脚本支持以下选项:

  • -f filename:指定一个文件名;
  • -d dirname:指定一个目录名。
#!/bin/bash
while getopts "f:d:" opt; do
    case ${opt} in
        f ) 
            echo "File name: $OPTARG" ;;
        d ) 
            echo "Directory name: $OPTARG" ;;
        \? ) 
            echo "Invalid option: -$OPTARG" 1>&2
            exit 1 ;;
        : )
            echo "Option -$OPTARG requires an argument." 1>&2
            exit 1 ;;
    esac
done
shift $((OPTIND -1))

在上面的代码中,我们在选项字符后面加上冒号,表示该选项需要一个参数,然后在case语句中使用变量OPTARG获取参数值。

getopts还有很多的高级用法,可以通过man getopts来查看详细的帮助文档。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Shell脚本中使用getopts处理多命令行选项 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • AE跟踪器怎样创建空白和摄像机? ae跟踪摄像机创建空白对象的技巧

    以下是创建空白对象和跟踪摄像机的AE技巧的完整攻略: 创建空白对象 在AE项目中,打开合成窗口。 在合成窗口中,点击\”Layer\”菜单,选择\”New\”,然后选择\”Null Object\”。 在弹出的对话框中,可以选择设置空白对象的名称和其他属性,然后点击\”OK\”。 空白对象将被添加到合成窗口中,可以在图层面板中看到。 示例1:创建一个名为\”…

    other 2023年10月17日
    00
  • php笔记之:php数组相关函数的使用

    下面是完整攻略: 标题 PHP笔记之:PHP数组相关函数的使用 介绍 在PHP中,数组是一种非常常见的数据类型,在处理数据时使用频率极高。本篇笔记将介绍PHP中与数组相关的函数使用方法,其中包括常用的数组创建、遍历、筛选、排序等操作。 数组创建 创建索引数组 $indexArr = array("apple", "banana&…

    other 2023年6月25日
    00
  • Bootstrap按钮组件详解

    Bootstrap按钮组件详解 Bootstrap是一个流行的前端开发框架,提供了丰富的组件和样式,其中按钮组件是常用的UI元素之一。本攻略将详细讲解Bootstrap按钮组件的使用方法和示例。 1. 基本用法 Bootstrap按钮组件可以通过添加相应的class来创建不同样式的按钮。以下是一些常用的class: btn:基本按钮样式 btn-primar…

    other 2023年7月28日
    00
  • MySQL常见的底层优化操作教程及相关建议

    MySQL常见的底层优化操作教程及相关建议 1. 索引优化 使用索引是提高MySQL查询速度的一种重要手段。在优化索引时,需要考虑以下几个方面: 1.1. 索引种类 MySQL中常见索引种类包括PRIMARY KEY、UNIQUE KEY、INDEX和FULLTEXT INDEX。在设计表结构时,需要选择适合的索引种类,并且合理设置索引列。 1.2. 多列索…

    other 2023年6月27日
    00
  • react源码中的生命周期和事件系统实例解析

    React源码中的生命周期和事件系统实例解析 React.js是一个广泛使用的JavaScript库,它使用组件定义的方式构建用户界面,而且生命周期和事件系统是React.js的核心特性之一。本篇攻略将详细讲解React源码中生命周期和事件系统的实例解析,并包含两条示例说明。 生命周期 生命周期概览 React 组件从创建到消亡都有特定的生命周期方法,可以用…

    other 2023年6月27日
    00
  • powerbi基础操作-summarizecolumns()函数

    Power BI基础操作 – summarizecolumns()函数 summarizecolumns()是Power BI中的一个DAX函数,用于对数据表中的列进行汇总计算。本攻略将介绍summarize()函数的用法,并提供两个示例。 语法 summarizecolumns()函数的语法如下: SUMMARIZEC ( <column1>,…

    other 2023年5月9日
    00
  • delphixe2之firemonkey入门(40)-控件基础:tmemo

    以下是Delphi XE2之FireMonkey入门(40)-控件基础:TMemo的攻略: 步骤1:了解TMemo控件 TMemo控件是FireMonkey框架的一个多行文本框控件,可以用于显示和编辑多行文本。TMemo控件支持多种文本格式和字体样式,可以通过代码或属性面板进行设置。 步骤2:创建TMemo控件 以下是创建TMemo控件的示例: 在FireM…

    other 2023年5月6日
    00
  • 关于tp90tp99等常用于评估软件系统的处理性能的指标概念

    当然,我可以为您提供有关“关于tp90、tp99等常用于评估软件系统的处理性能的指标概念”的完整攻略,以下是详细说明: 什么是tp90、tp99等指标? 在软件系统的性能评估中,通常使用一指标来衡量系统的处理性能。其中,tp90、tp99等指标是常用的性能指标之一。 tp90:表示系统处理请求的90%的时间。 tp99:表示系统处理请求的99%的时间。 这些…

    other 2023年5月7日
    00
合作推广
合作推广
分享本页
返回顶部