1

我正在编写一个接受三个参数的 shell 程序:

  • 确定程序功能的整数
  • 程序使用的文件

该命令的格式为 myProgram num 文件。但是,如果命令只有 0、1 或超过 2 个参数,我希望程序输出错误。也就是说,如果我输入“myProgram”、“myProgram num”或“myProgram num file anotherWord”,则会在屏幕上打印错误。有谁知道我如何将它实现到我现有的代码中?

4

4 回答 4

1

在 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

于 2012-10-09T01:44:29.347 回答
0

内置变量$#包含传递给脚本的参数数量。您可以使用它来检查是否有足够的参数,如下所示:

#!/bin/bash

if [ $# -ne 2 ]; then
    echo "Usage: myProgram num file" >&2
    exit 1
fi

# The rest of your script.
于 2012-10-09T01:11:17.117 回答
0

如果您使用的是 bash,那么您可以像这样处理它:

#!/bin/bash
if [ $# -lt 2 ] || [ $# -gt 3 ]
then
  echo "You did not provide the correct parameters"
  echo "Usage: blah blah blah"
fi

这是一个非常简单的检查。您还可以查看 getopt 处理的手册页,这在评估命令行参数时功能更强大。

好起来

于 2012-10-09T01:15:09.357 回答
0

使用 $# 中内置的 shell 来确定传递给脚本的参数数量。您的程序名称不计算在内。

于 2012-10-09T01:10:27.250 回答