我正在尝试创建一个验证参数数量的用法函数,我尝试了下面的代码但是如果条件总是假的,即使我提供了三个参数。此外echo $#
也会产生0。
#!/bin/bash
programname=$0
function usage {
if [ $# -ne 3 ]
then
echo "Usage: $programname filename LogFile milestoneFile"
echo $#
exit 1
fi
}
usage
答案 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