在bash中计算命令行变量的数量

时间:2018-01-15 13:50:52

标签: bash unix

我正在尝试创建一个验证参数数量的用法函数,我尝试了下面的代码但是如果条件总是假的,即使我提供了三个参数。此外echo $#也会产生0。

#!/bin/bash
programname=$0
function usage {

    if [ $# -ne 3 ]
    then
      echo "Usage: $programname filename LogFile milestoneFile"
      echo $#
      exit 1
    fi
}
usage

2 个答案:

答案 0 :(得分:4)

在您的代码中,函数usage使用$#计算函数参数,而不是程序的参数。

你可以像这样重写:

#!/bin/bash
programname=$0
function usage {

    if [ $1 -ne 3 ]
    then
      echo "Usage: $programname filename LogFile milestoneFile"
      echo $1
      exit 1
    fi
}
usage $#

现在用1参数调用函数,包含脚本的参数计数。函数中的$1在脚本中等于$#(当您运行./script.sh时等于0,如果运行./script.sh one two three则等于3等。)

答案 1 :(得分:4)

目前,您正在检查usage()函数参数,而不是整个程序。

我会这样写:

programname=$0

function usage {
      echo "Usage: $programname filename LogFile milestoneFile"
      echo $1
}
if [ $# -ne 3 ]
then
    #Call the function with `$#` arg, or you will get `echo 0` every time inside of the function`
    usage $#
    exit 1
fi