如果没有parameter passing,如何显示帮助文本

我最近一直在使用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 ]] 

http://mywiki.wooledge.org/BashGuide/TestsAndConditionals

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 / [...]更少的惊喜。