标签: getopts

如何在Bash中解析命令行参数?

说,我有一个用这行调用的脚本:

./myscript -vfd ./foo/bar/someFile -o /fizz/someOtherFile
Run Code Online (Sandbox Code Playgroud)

或者这个:

./myscript -v -f -d -o /fizz/someOtherFile ./foo/bar/someFile 
Run Code Online (Sandbox Code Playgroud)

什么是分析这使得在每一种情况下(或两者的组合)的接受的方式$v,$f以及 $d将全部设置为true$outFile将等于/fizz/someOtherFile

bash scripting command-line arguments getopts

1764
推荐指数
24
解决办法
136万
查看次数

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

我希望使用我的shell脚本调用多种形式的命令行选项.

我知道getopts可以使用,但就像在Perl中一样,我无法对shell做同样的事情.

关于如何做到这一点的任何想法,以便我可以使用如下选项:

./shell.sh --copyfile abc.pl /tmp/
./shell.sh -c abc.pl /tmp/
Run Code Online (Sandbox Code Playgroud)

在上面,两个命令对我的shell意味着相同的东西,但使用getopts,我还没有能够实现这些?

bash getopt getopts command-line-arguments

390
推荐指数
17
解决办法
39万
查看次数

一个如何在bash中使用getopts的例子

我想以myscript这种方式调用文件:

$ ./myscript -s 45 -p any_string
Run Code Online (Sandbox Code Playgroud)

要么

$ ./myscript -h  #should display help
$ ./myscript     #should display help
Run Code Online (Sandbox Code Playgroud)

我的要求是:

  • getopt 这里得到输入参数
  • 检查是否-s存在,如果没有返回错误
  • 检查之后的值-s是45还是90
  • 检查是否-p存在并且之后有输入字符串
  • 如果用户输入./myscript -h或只是./myscript显示帮助

我到目前为止尝试了这段代码:

#!/bin/bash
while getopts "h:s:" arg; do
  case $arg in
    h)
      echo "usage" 
      ;;
    s)
      strength=$OPTARG
      echo $strength
      ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)

但是使用该代码我会收到错误.怎么用Bash和getopt

bash shell getopts

310
推荐指数
7
解决办法
44万
查看次数

在Bash中使用getopts检索单个选项的多个参数

我需要帮助getopts.

我创建了一个Bash脚本,在运行时看起来像这样:

$ foo.sh -i env -d directory -s子目录-f文件

从每个标志处理一个参数时,它可以正常工作.但是当我从每个标志调用几个参数时,我不确定如何从变量中提取多个变量信息getopts.

while getopts ":i:d:s:f:" opt
   do
     case $opt in
        i ) initial=$OPTARG;;
        d ) dir=$OPTARG;;
        s ) sub=$OPTARG;;
        f ) files=$OPTARG;;

     esac
done
Run Code Online (Sandbox Code Playgroud)

抓住选项后,我想从变量构建目录结构

foo.sh -i test -d directory -s subdirectory -s subdirectory2 -f file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

那么目录结构就是

/test/directory/subdirectory/file1
/test/directory/subdirectory/file2
/test/directory/subdirectory/file3
/test/directory/subdirectory2/file1
/test/directory/subdirectory2/file2
/test/directory/subdirectory2/file3
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

bash getopts command-line-arguments

50
推荐指数
7
解决办法
8万
查看次数

在Bash函数中使用getopts

我想getopts在我的.bash_profile中定义的函数内部使用.我的想法是,我想将一些标志传递给此函数以改变其行为.

这是代码:

function t() {
    echo $*
    getopts "a:" OPTION
    echo $OPTION
    echo $OPTARG
}
Run Code Online (Sandbox Code Playgroud)

当我这样调用它时:

t -a bc
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

-a bc
?
 
Run Code Online (Sandbox Code Playgroud)

怎么了?我想在bc没有手动移位和解析的情况下获得该值.如何getopts在函数内正确使用?

编辑:纠正我的代码片段尝试$ OPTARG,无济于事

编辑#2:好的事实证明代码没问题,我的shell被搞砸了.打开一个新窗口解决了它.arg值确实在$ OPTARG中.

bash function getopts

43
推荐指数
3
解决办法
2万
查看次数

bash getopts有多个和强制选项

是否可以使用getopts一起处理多个选项?例如,myscript -iR或myscript -irv.

此外,我有一种情况,基于条件脚本将需要强制选项.例如,如果脚本的参数是一个目录,我将需要指定-R或-r选项以及任何其他选项(myscript -iR mydir或myscript -ir mydir或myscript -i -r mydir或myscript -i -R mydir),如果只有文件-i就足够了(myscript -i myfile).

我试图搜索但没有得到任何答案.

bash getopts

38
推荐指数
1
解决办法
7万
查看次数

getopts的可选选项参数

while getopts "hd:R:" arg; do
  case $arg in
    h)
      echo "usgae" 
      ;;
    d)
      dir=$OPTARG
      ;;
    R)
      if [[ $OPTARG =~ ^[0-9]+$ ]];then
        level=$OPTARG
      else
        level=1
      fi
      ;;
    \?)
      echo "WRONG" >&2
      ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)
  • level是指参数-R,dir是指参数-d

  • 当我输入 ./count.sh -R 1 -d test/它正确的工作

  • 当我输入./count.sh -d test/ -R 1它正确的工作

  • 但我想在输入./count.sh -d test/ -R或输入时使其工作./count.sh -R -d test/

这意味着我想要-R一个默认值,命令序列可以更灵活.

bash getopt getopts

34
推荐指数
5
解决办法
5万
查看次数

如何在内置Bash getopts的情况下使用长选项?

我试图-temp用Bash getopts 解析一个选项.我正在调用我的脚本:

./myscript -temp /foo/bar/someFile
Run Code Online (Sandbox Code Playgroud)

这是我用来解析选项的代码.

while getopts "temp:shots:o:" option; do
    case $option in
        temp) TMPDIR="$OPTARG" ;;
        shots) NUMSHOTS="$OPTARG" ;;
        o) OUTFILE="$OPTARG" ;;
        *) usage ;;
    esac
done
shift $(($OPTIND - 1))

[ $# -lt 1 ] && usage
Run Code Online (Sandbox Code Playgroud)

bash getopts command-line-arguments

33
推荐指数
2
解决办法
5万
查看次数

在getopts之后解析参数

我想像这样调用一个bash脚本

$ ./scriptName -o -p -t something path/to/file
Run Code Online (Sandbox Code Playgroud)

这是我得到的

#!/bin/bash

o=false
p=false

while getopts ":opt:" options
do
    case $options in
        o ) opt1=true
        ;;
        p ) opt2=true
        ;;
        t ) opt3=$OPTARG
        ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

但我怎么得到path/to/file

bash arguments getopts command-line-arguments

28
推荐指数
2
解决办法
2万
查看次数

如何使用包含空格的参数处理shell getopts

我正在寻找一种方法来处理包含空格的参数,这些空格必须由shell getopts命令解析.

while getopts ":a:i:o:e:v:u:" arg
  do
  echo "ARG is: $arg" >> /tmp/submit.log
  case "$arg" in
  a) arg1="$OPTARG" ;;
  i) arg2="$OPTARG" ;;
  o) arg3="$OPTARG" ;;
  ...
  u) argn="$OPTARG" ;;
  -) break ;;
  \?) ;;
  *) echo "unhandled option $arg" >> /tmp/submit.log ;;
  ?) echo $usage_string
     exit 1 ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)

现在,如果-u具有像"STRING WITH WHITE SPACE"这样的参数,而不仅仅是触发了字符串的第一部分,而while循环不会结束.

非常感谢.

shell getopts

14
推荐指数
2
解决办法
2万
查看次数