我正在编写一个接受三个参数的 shell 程序:
- 确定程序功能的整数
- 程序使用的文件
该命令的格式为 myProgram num 文件。但是,如果命令只有 0、1 或超过 2 个参数,我希望程序输出错误。也就是说,如果我输入“myProgram”、“myProgram num”或“myProgram num file anotherWord”,则会在屏幕上打印错误。有谁知道我如何将它实现到我现有的代码中?
在 bash 中,使用整数时,(( ))
更直观:
#!/bin/bash
if (($# < 2)); then
printf >&2 "There's less than 2 arguments\n"
exit 1
fi
if (($# > 2)); then
printf >&2 "There's more than 2 arguments\n"
exit 1
fi
if ! (($1)); then
printf >&2 "First argument must be a positive integer\n"
exit 1
fi
if [[ ! -f "$2" ]]; then
printf >&2 "Second argument must be an exited file\n"
exit 1
fi
# -->the rest of the script here<--
此外,为了尊重最佳实践和正确编码,在打印错误时,它必须STDERR
像我一样printf >&2
内置变量$#
包含传递给脚本的参数数量。您可以使用它来检查是否有足够的参数,如下所示:
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: myProgram num file" >&2
exit 1
fi
# The rest of your script.
如果您使用的是 bash,那么您可以像这样处理它:
#!/bin/bash
if [ $# -lt 2 ] || [ $# -gt 3 ]
then
echo "You did not provide the correct parameters"
echo "Usage: blah blah blah"
fi
这是一个非常简单的检查。您还可以查看 getopt 处理的手册页,这在评估命令行参数时功能更强大。
好起来
使用 $# 中内置的 shell 来确定传递给脚本的参数数量。您的程序名称不计算在内。