Bourne Shell编程:处理参数错误
我正在编写一个包含三个参数的shell程序:Bourne Shell编程:处理参数错误,shell,input,Shell,Input,我正在编写一个包含三个参数的shell程序: 用于确定程序功能的整数 程序使用的文件 该命令的格式为myProgram num file。但是,如果命令只有0、1或2个以上的参数,我希望程序输出一个错误。也就是说,如果我键入“myProgram”、“myProgram num”或“myProgram num file”另一个单词,屏幕上将显示一个错误。有人知道我如何在现有代码中实现这一点吗?使用内置的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上,请参阅我的帖子。