我最近一直在使用getopts,并且已经设置了所有的东西。 我有一个问题,但。 我希望它能够工作,如果有人不在命令行中input参数,他们将获得帮助文本,例如:
$ ./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
使用如下测试来验证用户输入。
如果-z
后面的字符串长度为零,则test
的-z
选项返回true。
if [ -z "$1" ] then helptext exit 1 fi
尝试在你的脚本中使用这个:
#!/bin/bash [[ $@ ]] || { helptext; exit 1; } # --- the rest of the script ---
这行代码是布尔缩写版本
if [[ $@ ]]; then true else helptext exit 1 fi
$@
是脚本的所有参数
[[ $var ]]
是一个简写
[[ -n $var ]]
Gilles Quenot的回答很好,很简洁, 如果您正在寻找更明确地表达意图的解决方案, 则可以尝试这些基于参数计数的$#
:
[[ $# -gt 0 ]] || { helptext; exit 1; }
另外,使用算术表达式:
(( $# > 0 )) || { helptext; exit 1; }
最后,速记依赖于0评估为false,任何非零数字为真:
(( $# )) || { helptext; exit 1; }
威廉Pursell提供了另一个变种,这是兼容描述和POSIX:
test $# -gt 0 || { helptext; exit 1; }
test
/ [ ... ]
是POSIX实用程序/内置的,而类似的[[ ... ]]
条件是bash
特定的(as (( ... ))
)。
然而,一般来说, bash
的[[ ... ]]
提供了更多的功能,比test
/ [...]
更少的惊喜。