我最近一直在使用getopts,而且我已经设置了一切。我虽然遇到了问题。我希望它能够工作,这样如果某人没有在命令行输入参数,他们就会获得帮助文本,例如:
$ ./script
$ help: xyz - argument must be used.
这是我目前所拥有的。
#!/bin/bash
function helptext {
# ...
}
function mitlicense {
# ...
}
while getopts "hl" opt; do
case $opt in
h) helptext >&2
exit 1
;;
l) mitlicense >&2
exit 0
;;
\?) echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:) echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
*) helptext >&2
exit 1
;;
esac
done
答案 0 :(得分:9)
使用if测试验证用户输入,如下所示。
如果-z后面的字符串长度为零,则-z
的{{1}}选项返回true。
test
答案 1 :(得分:7)
尝试在脚本中使用它:
#!/bin/bash
[[ $@ ]] || { helptext; exit 1; }
# --- the rest of the script ---
代码行是
的布尔缩短版本if [[ $@ ]]; then
true
else
helptext
exit 1
fi
$@
是脚本的所有参数
[[ $var ]]
是
的简写[[ -n $var ]]
请参阅http://mywiki.wooledge.org/BashGuide/TestsAndConditionals
答案 2 :(得分:5)
Gilles Quenot's answer效果很好,非常简洁;如果您正在寻找更明确地表达意图的解决方案,您可以尝试这些,这些是基于 count 的参数$#
:
[[ $# -gt 0 ]] || { helptext; exit 1; }
替代方案,使用算术表达式:
(( $# > 0 )) || { helptext; exit 1; }
最后,简写依赖0评估为false,任何非零数字为true:
(( $# )) || { helptext; exit 1; }
William Pursell提供了另一种变体,它既具有描述性又符合POSIX:
test $# -gt 0 || { helptext; exit 1; }
test
/ [ ... ]
是一个POSIX实用程序/内置的,而类似的[[ ... ]]
条件是bash
- 具体的((( ... ))
})。
但是,通常情况下,bash
的{{1}}提供的功能更多,而且比[[ ... ]]
/ test
的意外更少。