我一直在搜索,但我对bash脚本和getopts有疑问。
我正在尝试使用getops构建一个傻瓜证明脚本。什么是最好的方法,所以当用户使用选项时,如果我添加多个将会抛出错误。
示例:
script.sh -a>这将运行选项
script.sh -aaaaa>一个错误应该抛出一些东西说,只允许一个标志。
答案 0 :(得分:0)
以下代码使用getopts
来解析选项。当看到选项a
时,它会将变量a
设置为值Yes
。但是,在执行此操作之前,它会检查a
是否已有值。如果是,则会输出错误。
#!/bin/sh
die () {
echo "ERROR: $*. Aborting." >&2
exit 1
}
a=
while getopts a arg ; do case $arg in
a)
[ "$a" ] && die "Option a already specified"
a=Yes
;;
:) die "${0##*/}: Must supply an argument to $OPTARG." ;;
\?) die "Invalid option. Abort" ;;
esac
done
shift $(($OPTIND - 1))
echo "Doing something useful now..."
代码的关键部分是:
[ "$a" ] && die "Option a already specified"
构造[ "$a" ]
测试$a
的值。如果它是非空的,则测试返回true,这会触发&&
运算符以运行die
命令。如果为空,则[ "$a" ]
返回false,而die
命令不运行。
die
是一个函数:它打印一条消息并以错误代码1退出。