【发布时间】:2019-02-18 12:11:55
【问题描述】:
我有一个以 getopts 开头的脚本,如下所示:
USAGE() { echo -e "Usage: bash $0 [-w <in-dir>] [-o <out-dir>] [-c <template1>] [-t <template2>] \n" 1>&2; exit 1; }
if (($# == 0))
then
USAGE
fi
while getopts ":w:o:c:t:h" opt
do
case $opt in
w ) BIGWIGS=$OPTARG
;;
o ) OUTDIR=$OPTARG
;;
c ) CONTAINER=$OPTARG
;;
t ) TRACK=$OPTARG
;;
h ) USAGE
;;
\? ) echo "Invalid option: -$OPTARG exiting" >&2
exit
;;
: ) echo "Option -$OPTARG requires an argument" >&2
exit
;;
esac
done
more commands etc
echo $OUTDIR
echo $CONTAINER
我对 getopts 还很陌生。我正在对此脚本进行一些测试,在某个阶段,我不需要/不想使用 -c 参数 [-c ]。换句话说,我试图测试脚本的另一个特定部分,根本不涉及 $CONTAINER 变量。因此,我只是在 $CONTAINER 的所有命令前添加了#,并进行了一些测试,这很好。
在不使用 $CONTAINER 的情况下测试脚本时,我输入了:
bash script.bash -w mydir -o myoutdir -t mywantedtemplate
但是,我想知道,鉴于我的 getopts 命令,我没有收到警告。换句话说,为什么我没有收到要求 -c 参数的警告。这可能吗?仅当我键入以下内容时才会出现警告:
bash script.bash -w mydir -o myoutdir -t mywantedtemplate -c
更新
做了一些测试后,我认为是这样的:
- 如果你没有明确写“-c”,getopts 不会“询问”你并给你一个错误(除非你的脚本正在用它做一些事情 - 即如果你没有把 # 放在前面使用此参数的每个命令)
- 只有输入“-c”才会报错
这对吗?
【问题讨论】:
标签: bash parameter-passing command-line-arguments getopts