检查正确数量的参数

Posted

技术标签:

【中文标题】检查正确数量的参数【英文标题】:Checking for the correct number of arguments 【发布时间】:2011-05-19 12:05:21 【问题描述】:

我如何(一个参数)。如果有人试图在没有传入正确数量的参数的情况下调用脚本,并检查以确保命令行参数确实存在并且是一个目录。

【问题讨论】:

@Daniel shell 表示/bin/sh 【参考方案1】:
#!/bin/sh
if [ "$#" -ne 1 ] || ! [ -d "$1" ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi

翻译:如果参数的数量不(数值上)等于 1 或第一个参数不是目录,则将使用情况输出到 stderr 并以失败状态代码退出。

更友好的错误报告:

#!/bin/sh
if [ "$#" -ne 1 ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi
if ! [ -e "$1" ]; then
  echo "$1 not found" >&2
  exit 1
fi
if ! [ -d "$1" ]; then
  echo "$1 not a directory" >&2
  exit 1
fi

【讨论】:

@Andrew K:它在哪一行报告这个?如果是“if”行,请尝试删除两个子句之一,使其成为if [ "$#" -ne 1 ] ; thenif ! [ -d "$1" ]; then,看看哪个子句导致了问题。 我明白了,谢谢。文件名不存在怎么办? 不存在 == 就-d 而言,它不是董事。如果您想添加单独的检查,可以使用-e 来检查是否存在。 if [ -e "$1" ] then echo "$1 : No such directory" exit 1 fi @Andrew K:您想反转支票。 -e 如果文件存在则返回 true。我在答案中添加了更友好的错误报告。【参考方案2】:

猫脚本.sh

    var1=$1
    var2=$2
    if [ "$#" -eq 2 ]
    then
            if [ -d $var1 ]
            then
            echo directory $var1 exist
            else
            echo Directory $var1 Does not exists
            fi
            if [ -d $var2 ]
            then
            echo directory $var2 exist
            else
            echo Directory $var2 Does not exists
            fi
    else
    echo "Arguments are not equals to 2"
    exit 1
    fi

如下执行 -

./script.sh directory1 directory2

输出会像 -

directory1 exit
directory2 Does not exists

【讨论】:

【参考方案3】:

您可以使用 "$#" 检查命令行中传递的参数总数 例如,我的 shell 脚本名称是 hello.sh

sh hello.sh hello-world
# I am passing hello-world as argument in command line which will b considered as 1 argument 
if [ $# -eq 1 ] 
then
    echo $1
else
    echo "invalid argument please pass only one argument "
fi

输出将是hello-world

【讨论】:

以上是关于检查正确数量的参数的主要内容,如果未能解决你的问题,请参考以下文章

检查正确数量的参数

SQL 未命名参数语法

来自 C# 的 PROCEDURE... 的参数数量不正确

错误:预期的参数数量不正确 1

自定义事件错误“参数数量不正确。预计不超过 1。”

尽管函数调用的参数数量不正确,但 C 程序编译