BASH – 如果没有命令行参数作为parameter passing,则抛出使用警告

我在这里find了一个关于计数传递给BASH脚本的参数数量的问题的答案。 我对这行感兴趣: ${1?"Usage: $0 ARGUMENT"}如果没有给出参数,它会抛出警告。

现在我想调用一个使用函数Usage : ${1?"Usage: $0 ARGUMENT"}但是我不知道该怎么做。 我试过: ${1?Usage}BASH在这一行上抛出一个错误。 有人可以build议如何使用这个调用一个函数。

示例脚本如下所示,

 #!/bin/bash function Usage() { echo "Usage: $0 [-q] [-d]" echo "" echo "where:" echo " -q: Query info" echo " -d: delete info" echo "" } # Exit if no argument is passed in : ${1?Usage} while getopts "qd" opt; do case $opt in q) echo "Query info" ;; d) echo "Delete info" ;; *) Usage; exit 1 ;; esac done 

那这个呢?

 function Usage() { echo "Usage: $0 [-q] [-d]" echo "" echo "where:" echo " -q: Query info" echo " -d: delete info" echo "" } # Exit if no argument is passed in : ${1?"$(Usage)"} 

无论如何,我认为这更可读:

 if [ $# -lt 1 ] ; then Usage fi 

另一个想法将是这样处理它:

 mode="" while getopts "qdh" opt; do case $opt in q) mode="Query info" ;; d) mode="Delete info" ;; h) Usage exit 0 ;; *) Usage >&2 exit 1 ;; esac done if [ -z "${mode}" ] ; then Usage >&2 exit 1 fi 

你只需要传递参数给bash脚本。 假定bash脚本的名字是hello.sh ; 例如:

  #!/bin/bash # script's name is hello.sh : ${1?"Usage: $0 Argument"} echo hello,$1 

然后chmod a+x hello.sh

那么我们调用脚本使用: bash hello.sh yourname然后回显“hello,yourname”,如果你只是调用使用bash hello.sh而没有参数为这个脚本,你会得到你的错误消息是这样的Usage: hello.sh Argument

在这里输入图像描述