首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在bash shell脚本中使用getopts来获取长和短的命令行选项

在bash shell脚本中,getopts 是一个内置命令,用于处理长短选项。它允许用户在命令行中输入参数,并在脚本内部处理这些参数。getopts 可以处理短选项(单个字符)和长选项(多个字符)。

getopts 的基本语法如下:

代码语言:bash
复制
getopts optstring name

其中,optstring 是一个包含所有可用选项的字符串,每个选项前面可以加上冒号(:)表示该选项需要参数。name 是一个变量名,用于存储当前处理的选项。

在使用 getopts 时,需要遵循以下步骤:

  1. 在脚本开头,使用 while 循环和 getopts 命令处理选项。
  2. 在循环内部,使用 case 语句处理不同的选项。
  3. 使用 shift $((OPTIND-1) 命令将非选项参数移到参数列表的开头。

以下是一个简单的示例脚本,演示如何使用 getopts 处理长短选项:

代码语言:bash
复制
#!/bin/bash

while getopts ":vh-:" opt; do
  case $opt in
    -) # 长选项
      case $OPTARG in
        verbose)
          verbose=1
          ;;
        help)
          help=1
          ;;
        *)
          echo "Invalid option: --$OPTARG" >&2
          exit 1
          ;;
      esac
      ;;
    v) # 短选项
      verbose=1
      ;;
    h) # 短选项
      help=1
      ;;
    \?) # 无效选项
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :) # 缺少参数
      echo "Option -$OPTARG requires an argument" >&2
      exit 1
      ;;
  esac
done

shift $((OPTIND-1))

# 处理非选项参数
non_option_args=("$@")

if [ -n "$help" ]; then
  echo "Usage: $0 [-v] [--verbose] [--help]"
  exit 0
fi

if [ -n "$verbose" ]; then
  echo "Verbose mode enabled"
fi

echo "Non-option arguments: ${non_option_args[@]}"

在这个示例中,我们使用 getopts 处理了长选项 --verbose--help,以及短选项 -v-h。如果用户提供了无效的选项或缺少参数,脚本将输出错误信息并退出。最后,我们将非选项参数存储在数组 non_option_args 中,并在脚本末尾输出它们。

推荐的腾讯云相关产品和产品介绍链接地址:

相关搜索:如何使用getopts在命令行中传递shell脚本的强制和可选标志?使用mysqldump与where选项和bash脚本中的长参数列表Bash:在可以从命令行访问的bash脚本中创建shell变量如何使用"read -p“选项在shell脚本的新行中显示不同的选项将Bash与来自stdin的脚本文本和来自命令行的选项一起使用如何在Linux bash shell脚本中使用curl命令中的变量来发送带有文件的post请求?使用Bash获取在子subshell中启动的Python脚本的退出代码Bash和Conda:使用可执行的bash脚本在conda环境中安装非conda包在bash脚本中,如何从使用eval命令执行的程序中获取PID?如何使用python获取在shell中执行的命令和参数使用groovy脚本在活动选项参数中获取视图中的所有作业在bash脚本中,如何使用cli参数作为mysql查询和捕获结果的变量?FND_GLOBAL.CONC_REQUEST_ID是否可以在shell脚本中使用它来获取并发程序的request_id如何使用shell脚本和像sed这样的内置linux工具在json文本中查找键值对?如何使用bash shell脚本删除文件夹中除第一个和最后一个文件外的文件在bash脚本中获取单个进程在我终止之前的平均CPU使用率百分比如何在本地克隆的存储库上使用git在bash / shell中列出拉取请求的标题、状态和日期如何使用Xamarin Forms Shell在iOS中的选项卡行和图标之间添加一个空格?在Reinforced.Typings中是否有一个配置选项来TsIgnore所有属性和方法,除非它们具有使用设置的TsProperty属性?在图书馆的Common Lisp生态系统中,如何使用Clss和/或Plump而不是Parenscript来获取DOM的活动元素?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券