检查bash脚本中是否至少提供了两个参数

Bil*_*ull 20 linux bash

我正在尝试编写一个模拟cp的脚本,其中有源和目标输入.如何计算命令行中给出的参数数量

例如

./myscript src dest

检查至少有两件事.

Lau*_*ves 33

使用$#特殊变量.它的值是参数的数量.因此,如果您的脚本仅包含:

echo $#
Run Code Online (Sandbox Code Playgroud)

并执行它:

thatscript foo bar baz quux
Run Code Online (Sandbox Code Playgroud)

它会打印4.

在您的情况下,您可能想要做以下事情:

if [ $# -ne 2 ]; then
    # TODO: print usage
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)


And*_*rew 20

根据参数应该包含"至少2件事"的问题的要求,我认为检查可能更准确:

if (( $# < 2 )); then
    # TODO: print usage
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

使用算术扩展 (( ))将阻止此命中exit 1任何不等于2的值.

如果使用if [ $# -ne 2 ];它将触发除2以外的任何数量的参数的条件.