我想在getopts
中强制使用一些标志及其相应的参数。我这样做的方法是检查参数是否被传递给强制标志,就像这样(-i的标志和它的参数应该是强制性的):
在test.sh中:
while getopts "i:n:d:r:p:s:l:" opt; do
case $opt in
i) thefile=$OPTARG;;
n) size=$OPTARG;;
d) dmax=$OPTARG;;
r) rmsd=$OPTARG;;
p) penalty=$OPTARG;;
s) sampling=$OPTARG;;
l) log=$OPTARG;;
h) printf "Usage: `basename $0` options -i [input_file.txt]\n \
-i input file\n \
-n size\n \
-d dist\n \
-r rflag\n \
-p pflag \n \
-l 0/1 for generating log file (optional, default=1)\n \
-h for help \n";;
\? ) echo "Unknown option: -$OPTARG" >&2; exit 1;;
: ) echo "Missing option argument for -$OPTARG" >&2; exit 1;;
* ) echo "Unimplemented option: -$OPTARG" >&2; exit 1;;
esac
done
if [ "s" == "s$thefile" ]
then
echo "-i must be included with a specified file" >&2
exit 1
fi
问题是可以像这样运行脚本:
./test.sh -i -n 4
它仍以-i
的值运行为" -n"。我怎样才能使这个万无一失,所以总是使用该标志并使用一个有效的字符串参数呢?