有人可以告诉我一个如何正确使用getopts的例子,或者我能够在参数中传递的任何其他技术吗?我试图在unix shell / bash中写这个。我看到有getopt和getopts,不知道哪个更好用。最后,我将构建它以添加更多选项。
在这种情况下,我想将文件路径作为输入传递给shell脚本,并在未正确输入的情况下放置描述。
export TARGET_DIR="$filepath"
例如:(调用命令行)
./mytest.sh -d /home/dev/inputfiles
如果以这种方式运行错误消息或提示正确使用:
./mytest.sh -d /home/dev/inputfiles/
答案 0 :(得分:6)
作为一个用户,我会非常恼火地使用一个程序,该程序在提供带有斜杠的目录名时给了我一个错误。如有必要,您可以将其删除。
具有完整错误检查的shell示例:
#!/bin/sh
usage () {
echo "usage: $0 -d dir_name"
echo any other helpful text
}
dirname=""
while getopts ":hd:" option; do
case "$option" in
d) dirname="$OPTARG" ;;
h) # it's always useful to provide some help
usage
exit 0
;;
:) echo "Error: -$OPTARG requires an argument"
usage
exit 1
;;
?) echo "Error: unknown option -$OPTARG"
usage
exit 1
;;
esac
done
if [ -z "$dirname" ]; then
echo "Error: you must specify a directory name using -d"
usage
exit 1
fi
if [ ! -d "$dirname" ]; then
echo "Error: the dir_name argument must be a directory
exit 1
fi
# strip any trailing slash from the dir_name value
dirname="${dirname%/}"
有关getopts文档,请查看bash manual
答案 1 :(得分:0)
更正':)'行:
:) echo "Error: -$OPTARG requires an argument"
因为如果在标志之后没有提供任何值,则OPTARG获取该标志的名称,并将标志设置为“:”,在上面的示例中打印:
Error: -: requires an argument
这不是有用的信息。
同样适用于:
\?) echo "Error: unknown option -$OPTARG"
感谢您的样本!