IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux命令学习之处理命令行参数函数getopt -> 正文阅读

[系统运维]Linux命令学习之处理命令行参数函数getopt

Linux命令学习之处理命令行参数函数getopt

前言

  • 内容介绍

    getopt是一个独立的外部工具(Linux的一个命令),它的使用语法比较复杂,支持长命令参数,会重排参数的顺序。在shell中处理命令行参数时,需要配合其他Linux命令一起使用才行。其作用是分析输入参数,转换成格式化的输出字符串。

getopt的使用

命令格式

  • 三种格式

    getopt是Linux中的一个命令,通常位于/usr/bin目录中,它可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。getopt的命令使用有一下的三种格式:

    
       getopt optstring parameters
       getopt [options] [--] optstring parameters
       getopt [options] -o|--options optstring [options] [--] parameters
    
    
    
  • 参数介绍

    常用参数:

    -a 使getopt长参数支持"-"符号打头,必须与-l同时使用
    -l 后面接getopt支持长参数列表
    -n program如果getopt处理参数返回错误,会指出是谁处理的这个错误,这个在调用多个脚本时,很有用
    -o 后面接短参数列表,这种用法与getopts类似
    -u 不给参数列表加引号,默认是加引号的(不使用-u选项),例如在加不引号的时候 --longopt “select * from db1.table1” $2只会取到select ,而不是完整的SQL语句。

使用说明

  • 思路介绍

    仅凭getopt命令是不能独立完成shell命令行参数的解析,还需要配合其他命令一起运用才行。

    我们可以使用这样一种方法:

    1. 将getopt命令返回的匹配结果重新作为shell的位置参数,我们在循环中去左移动这些位置参数,每移动一次判断是当前参数是那种类型选项,并执行对应操作。当遇到"–"时,命令参数解析完毕,退出循环

    2. getopt返回的结果如何作为shell的传入位置参数呢?此时可以使用shell的内置的set函数,set – arg,arg中的参数作为shell的新的位置参数,可通过$N进行直接引用

    3. shift用于参数的左移,shift n表示向左移出n个参数,此时的 0 的 值 是 调 用 s h i f t n 之 前 的 0的值是调用shift n之前的 0shiftn(n+1)值。

  • 样例脚本

    
    
        #!/bin/sh
    
        SHORTOPTS="h,o:"
        LONGOPTS="help,output:"
        ARGS=$(getopt --options $SHORTOPTS  \  #①
        --longoptions $LONGOPTS -- "$@" )
        
        eval set -- "$ARGS"
        while true;
        do
            case $1 in
                -h|--help)
                echo "Print Help Information "
                shift
                ;;
                -o|--output)
                echo "Output result to $2 directory"
                shift 2
                ;;
                --)
                shift
                break
                ;;
            esac
        done
    
    
    
    

    ① --options表示短选项,–longoptions表示长选项,这里使用的是上述getopt命令的第三种形式

    如果–options、–longoptions后要指定多个选项参数,不同选项之间可以通过","进行分割指定;如果选项需要跟随一个参数,该选项后面需要加":",如果选项后面需要跟随一个可选参数,该选项后面需要加"::"

  • 结果分析

    
        ./shell.sh -h --help -o YOCTO --output=Public
        Print Help Information 
        Print Help Information 
        Output result to YOCTO directory
        Output result to Public directory
    
    
    
    

脚本分析

  • 样例脚本

    
        opts=`getopt -o abc:d: --long aa,bb,cc:,dd: -n "myscript" -- "$@"`
        if [ $? != 0 ] ; then echo "Failed parsing options." >&2; exit 1; fi
        eval set -- "$OPTS"
    
    
    

其他

  • $* 和 $@ 的区别

    参数不被双引号(" ")包含时

    $* 和 $@ 都表示传递给函数或脚本的所有参数,都以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。

    参数被双引号(" ")包含时

    “$*” 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;

    “$@” 会将各个参数分开,以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。

  • shift函数

    shift(shift 1) 命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。

  • 中括号常用参数

    -n 判断变量值不为空(若为空则为true)

  • ${parameter:offset}

    ${parameter:offset} 和 ${parameter:offset:length} 扩展让我们只扩展参数的一部分,返回一个从指定字符开始的${parameter:offset}子字符串。如果未指定长度,则扩展继续进行,直到原始字符串的结尾。这种类型的扩展称为:${parameter:offset:length}

参考链接

  • 命令行参数处理函数getopt和getopts

    https://www.jianshu.com/p/905ed52761de

  • shell中使用getopts、getopt处理命令行参数

    https://www.cnblogs.com/053179hu/p/14429727.html

  • Shell脚本中参数处理方法

    https://www.zmonster.me/2014/08/09/pare-arguments-in-shell-function#org29fcbdf

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 23:07:58  更:2022-03-15 23:09:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:34:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码