Bourne Shell编程:处理参数错误

Bourne Shell编程:处理参数错误,shell,input,Shell,Input,我正在编写一个包含三个参数的shell程序: 用于确定程序功能的整数 程序使用的文件 该命令的格式为myProgram num file。但是,如果命令只有0、1或2个以上的参数,我希望程序输出一个错误。也就是说,如果我键入“myProgram”、“myProgram num”或“myProgram num file”另一个单词,屏幕上将显示一个错误。有人知道我如何在现有代码中实现这一点吗?使用内置的shell$#来确定传递到脚本中的参数数量。您的程序名不计算在内。使用$#中内置的shell

我正在编写一个包含三个参数的shell程序:

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

该命令的格式为myProgram num file。但是,如果命令只有0、1或2个以上的参数,我希望程序输出一个错误。也就是说,如果我键入“myProgram”、“myProgram num”或“myProgram num file”另一个单词,屏幕上将显示一个错误。有人知道我如何在现有代码中实现这一点吗?

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

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

内置变量
$\#
包含传递给脚本的参数数。您可以使用此选项检查是否有足够的参数,如:

#!/bin/bash

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

# The rest of your script.

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

#!/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处理的手册页,这在评估命令行参数时更为强大


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

#!/bin/bash
if [ $# -lt 2 ] || [ $# -gt 3 ]
then
  echo "You did not provide the correct parameters"
  echo "Usage: blah blah blah"
fi
这是一个非常简单的检查。您还可以检查getopt处理的手册页,这在评估命令行参数时更为强大


在bash中,当使用整数时,
(())

#/bin/bash
如果($#<2));然后
printf>&2“参数少于2个\n”
出口1
fi
如果($#>2));然后
printf>&2“有两个以上的参数\n”
出口1
fi
如果!(($1)); 然后
printf>&2“第一个参数必须是正整数\n”
出口1
fi
如果[!-f“$2”];然后
printf>&2“第二个参数必须是已退出的文件\n”
出口1
fi

#-->这里是脚本的其余部分&2在bash中,当使用整数时,
(())

#/bin/bash
如果($#<2));然后
printf>&2“参数少于2个\n”
出口1
fi
如果($#>2));然后
printf>&2“有两个以上的参数\n”
出口1
fi
如果!(($1)); 然后
printf>&2“第一个参数必须是正整数\n”
出口1
fi
如果[!-f“$2”];然后
printf>&2“第二个参数必须是已退出的文件\n”
出口1
fi

#-->此处脚本的其余部分&2

$?
是上次命令运行的退出状态
$#
是参数的数量。感谢注意,修复了输入错误。
$?
是上次运行命令的退出状态
$#
是参数数。感谢注意,修复了输入错误。这将仅在参数少于3个时显示消息,如果参数多于3个怎么办?编辑以在bash中显示条件if语句。要创建一个“and”,可以使用&&而不是| |,在测试中使用OR条件将其重写为
if[$#-lt 3-o$#-gt-4]
。或者您可以使用
if[$#-ne 3]
来执行相同的操作。另外,原始海报只需要2个参数,而不是3个。这将仅在参数少于3个时显示消息,如果参数多于3个怎么办?编辑以显示bash中的条件if语句。要创建一个“and”,可以使用&&而不是| |,在测试中使用OR条件将其重写为
if[$#-lt 3-o$#-gt-4]
。或者您可以使用
if[$#-ne 3]
来执行相同的操作。另外,原始海报只需要2个参数,而不是3个。错误必须在STDERR上,请参阅我的帖子。错误必须在STDERR上,请参阅我的帖子。