如何在 "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 xyzfile
或 createfile -n xyzfile 3
的意思相同。在我的脚本中,如果用户总是需要传递一个选项,我经常使用这种位置参数。
- 您甚至可以考虑将调用脚本的方式更改为
createfile xyzfile -n 3
甚至 createfile xyzfile
,其中名称是一个位置参数,文件数量是可选的(选择一个逻辑默认值,可能1)...
Linuxbash 脚本中的新内容。
这里我尝试用 getopts
创建一些文件。例如,我想创建 3 个名为 xyzfile 的文件,在命令行中应该给出 ./createfiles -n xyzfile 3
(选项 -n
后有 2 个参数)。结果应该是名称为 xyzfile_1、xyzfile_2 和 xyzfile_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 xyzfile
或createfile -n xyzfile 3
的意思相同。在我的脚本中,如果用户总是需要传递一个选项,我经常使用这种位置参数。 - 您甚至可以考虑将调用脚本的方式更改为
createfile xyzfile -n 3
甚至createfile xyzfile
,其中名称是一个位置参数,文件数量是可选的(选择一个逻辑默认值,可能1)...