如何在 "getopts" 选项下调用带有 2 个参数的函数

how to call a function with 2 arguments which under the option of "getopts"

Linuxbash 脚本中的新内容。 这里我尝试用 getopts 创建一些文件。例如,我想创建 3 个名为 xyzfile 的文件,在命令行中应该给出 ./createfiles -n xyzfile 3(选项 -n 后有 2 个参数)。结果应该是名称为 xyzfile_1、xyzfile_2 和 xyzfile_3.

的 3 个文件

我试图将我的 createfile() 函数放在 while 循环之外以及 while 循环内。但是选项 -n 不起作用。 我还尝试创建另一个名为 foo() 的函数,其中包含函数 createfile(),但仍然存在问题。 我不知道我能做什么了。希望我能从你们那里得到一些建议。非常感谢!

#!/bin/bash

    while getopts :n:bc opt; do
        case $opt in
            n) echo test 3333333
                 createfile() {
                    echo "$OPTARG"
                    sum=

                 for((i=1;i<=sum;i++))
                    do
                    touch "$OPTARG_${i}"
                done
                 }
                 createfile $OPTARG ;;
            b) echo "test 1111111";;
            c) echo "test 2222222";;
            *) echo error!;;
        esac
    done

首先解析选项,然后使用您发现的值。一个选项只能接受一个参数,所以 -n 只会得到第一个(我将在此处将其保留为文件名词干)。计数将是在 解析选项后 找到的普通位置参数。

while getopts :n:bc opt; do
  case $opt in
    n) stem=$OPTARG; shift 2;;
    b) shift 1;;
    c) shift 1;;
    *) shift 1; echo error ;;
  esac
done

count=${1?No count given}

createfile () {
  for ((i=; i<=; i++)); do
      touch "_${i}"
  done
}


createfile "$stem" "$count"

使用单独的选项进行计数,并在选项处理后创建您的文件。

类似于:

while getopts "n:c:" opt; do
    case $opt in
        n) name="$OPTARG";;
        c) count=$OPTARG;;
        # other options...
    esac
done

shift $((OPTIND -1))

while (( count > 0 )); do
    touch "${name}_$count"
    (( count-- ))
    # ...
done

getopts 仅支持不带或带 one 参数的选项。因此,您必须决定您希望脚本以何种方式工作。您有多种选择:

  • 添加一个新选项 -m 或类似选项以传递您要创建的最大文件数:createfile -n xyzfile -m 3
  • 您也可以使用未作为选项传递的参数,如果您解析得当,那么 createfile 3 -n xyzfilecreatefile -n xyzfile 3 的意思相同。在我的脚本中,如果用户总是需要传递一个选项,我经常使用这种位置参数。
  • 您甚至可以考虑将调用脚本的方式更改为 createfile xyzfile -n 3 甚至 createfile xyzfile,其中名称是一个位置参数,文件数量是可选的(选择一个逻辑默认值,可能1)...