使用 getopt 带有可选输入参数的 bash 脚本

乔纳斯奥尔森

我已经从tutorialspoint 的 getopt 文章中复制了代码,并使用了以下脚本(有点):


##argument_script.sh
VARS=`getopt -o i::o:: --long input::,output:: -- "$@"`
eval set -- "$VARS"

# extract options and their arguments into variables.
while true ; do
    case "$1" in

        -i|--input)
            case "$2" in
                "") MAPPE='/default/input/here/' ; shift 2 ;;
                *) MAPPE=$2 ; shift 2 ;;
            esac ;;
        
            -o|--output)
            case "$2" in
                "") OUTPUTFOLDER='/default/input/here/' ; shift 2 ;;
                *) OUTPUTFOLDER=$2 ; shift 2 ;;
        esac ;;
        --) shift ; break ;;
    esac
done

echo "${MAPPE}"
echo "${OUTPUTFOLDER}"

#do something here..

也就是说,我有两个可选的参数标志-i/--input-o/ -output我目前的脚本有问题:

要覆盖标志的默认值,您需要在标志后立即写入所需的值,不要有任何空格。例如:如果我想通过/c/进入-i/f/进入-o,我会需要调用脚本:bash argument_script.sh -i/c/ -o/f/注意缺少的空格。如果我要编写bash argument_script.sh -i /c/ -o /f/变量MAPPEOUTPUTFOLDER使用默认值。
可以在脚本被改写,因此传入的参数-i/-o需求空间后写(例如:bash argument_script.sh -i /c/ -o /f/

大学教师

您描述的行为是因为您:getopt. 只需将您的getopt线路更改为此,它就会起作用:

VARS=`getopt -o i:o: --long input:,output: -- "$@"`

但是,这是编写脚本的一种非常非常复杂的方式。这是一个更简单的版本(还纠正了一些不好的做法,如大写变量):

#!/bin/bash

##argument_script.sh
vars=$(getopt -o i:o: --long input:,output: -- "$@")
eval set -- "$vars"

mappe='/default/input/here/'
outputFolder='/default/input/here/'

# extract options and their arguments into variables.
for opt; do
    case "$opt" in
      -i|--input)
        mappe=$2
        shift 2
        ;;
      -o|--output)
        outputFolder=$2
        shift 2
        ;;
    esac
done
echo "mappe: $mappe"
echo "out: $outputFolder"

你现在可以这样做:

$ ./argument_script.sh -i /c/  -o /f/
mappe: /c/
out: /f/

请注意,如果您运行./argument_script.sh -i/c/ -o/f/. 空间不是必需的,它是允许的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从不使用getopt的脚本中为getopt传递参数

来自分类Dev

使用getopt和bc的Bash脚本Wind Chill

来自分类Dev

如何在bash脚本中编写getopt

来自分类Dev

在bash中传递多个参数(不使用getopt)

来自分类Dev

使用带有参数的bash脚本创建用户

来自分类Dev

使用参数运行 bash 脚本

来自分类Dev

如何在bash脚本中添加getopt选项

来自分类Dev

在运行时传递参数时使用getopt(s)运行脚本的特定部分

来自分类Dev

Bash getopt-转移多个参数

来自分类Dev

Linux bash,获取getopt默认参数

来自分类Dev

使用getopt解析Bash中的长样式参数时遇到问题

来自分类Dev

使用curl在bash脚本中使用参数

来自分类Dev

如何在只有长选项的bash命令行中使用getopt?

来自分类Dev

Bash脚本执行带有参数的命令

来自分类Dev

在输入中包含变量的脚本中,使用带有[TAB]的bash自动完成功能

来自分类Dev

如何在bash脚本中多次使用带有“-”(破折号)的标准输入?

来自分类Dev

如何使用动态输入参数从BASH的StdIn脚本调用python?

来自分类Dev

使用BASH脚本的名称作为输入参数

来自分类Dev

使用带有参数的bash脚本启动Docker容器(容器退出,代码为0)

来自分类Dev

Bash脚本执行带有参数并使用文件路径变量的jar

来自分类Dev

使用bash脚本喂食用户输入

来自分类Dev

CoffeeScript-使用参数执行bash脚本

来自分类Dev

Bash脚本:不使用$ @或$ *扩展参数

来自分类Dev

使用Javascript中的参数执行bash脚本

来自分类Dev

使用bash脚本将参数传递给python脚本

来自分类Dev

在bash脚本中使用带有“哪个”的命令

来自分类Dev

如何在带有变量的bash脚本中使用“ head”?

来自分类Dev

bash脚本检查输入参数

来自分类Dev

使用getopt获取未指定的参数C

Related 相关文章

  1. 1

    从不使用getopt的脚本中为getopt传递参数

  2. 2

    使用getopt和bc的Bash脚本Wind Chill

  3. 3

    如何在bash脚本中编写getopt

  4. 4

    在bash中传递多个参数(不使用getopt)

  5. 5

    使用带有参数的bash脚本创建用户

  6. 6

    使用参数运行 bash 脚本

  7. 7

    如何在bash脚本中添加getopt选项

  8. 8

    在运行时传递参数时使用getopt(s)运行脚本的特定部分

  9. 9

    Bash getopt-转移多个参数

  10. 10

    Linux bash,获取getopt默认参数

  11. 11

    使用getopt解析Bash中的长样式参数时遇到问题

  12. 12

    使用curl在bash脚本中使用参数

  13. 13

    如何在只有长选项的bash命令行中使用getopt?

  14. 14

    Bash脚本执行带有参数的命令

  15. 15

    在输入中包含变量的脚本中,使用带有[TAB]的bash自动完成功能

  16. 16

    如何在bash脚本中多次使用带有“-”(破折号)的标准输入?

  17. 17

    如何使用动态输入参数从BASH的StdIn脚本调用python?

  18. 18

    使用BASH脚本的名称作为输入参数

  19. 19

    使用带有参数的bash脚本启动Docker容器(容器退出,代码为0)

  20. 20

    Bash脚本执行带有参数并使用文件路径变量的jar

  21. 21

    使用bash脚本喂食用户输入

  22. 22

    CoffeeScript-使用参数执行bash脚本

  23. 23

    Bash脚本:不使用$ @或$ *扩展参数

  24. 24

    使用Javascript中的参数执行bash脚本

  25. 25

    使用bash脚本将参数传递给python脚本

  26. 26

    在bash脚本中使用带有“哪个”的命令

  27. 27

    如何在带有变量的bash脚本中使用“ head”?

  28. 28

    bash脚本检查输入参数

  29. 29

    使用getopt获取未指定的参数C

热门标签

归档