参数数量要求输入验证

时间:2013-06-20 16:38:06

标签: linux bash shell

编写脚本以在文件中搜索模式,并输出随该文件找到的行以及每行的编号。

我的脚本为

#!/bin/bash

echo "------ File =" $2 "------"
grep -ne $1 $2

它工作正常,但现在我需要验证。我想要的只是如何写

if [[ number of arguments <2 ]]; then
echo "Must enter two arguments"

还有一些东西

if [[ $2 is not a file/directory]]; then
echo "second arguemnt needs to be a file/directory"

一如既往,非常喜欢。

3 个答案:

答案 0 :(得分:3)

问题1:

if [[ number of arguments <2 ]]; then
echo "Must enter two arguments"

你可以这样做:

if [[ $# -ne 2 ]]
then
  echo "Usage: You must enter two arguments"
  exit -1
fi

问题2:

if [[ $2 is not a file/directory]]; then
echo "second arguemnt needs to be a file/directory"

你可以这样做:

if [[ ! -e $2 ]]
then
    echo "File does not exist!"
    exit -2
fi

答案 1 :(得分:0)

对于参数的数量,请使用$#

if [ $# -lt 2 ]
then
  echo "Too few args"
fi

第二个看看test。它有各种可以测试的东西:-d表示目录,-f表示常规文件。你可以检查各种各样的符号链接和命名管道。

答案 2 :(得分:0)

你的脚本运行正常,直到它破裂!如果你输入带有空格或其他有趣符号的文件名或参数,你会有很多有趣的惊喜。

#!/bin/bash

printf -- "------ File = %s ------\n" "$2"
grep -ne -- "$1" "$2"

已经好多了(观察引号,学习,使用更多引号!)。关于你的测试,你非常接近解决方案!

对于参数数量,我将使用变量$#使用shell arithmetic,请参阅the list of special parameters

if (( $# != 2 )); then
    echo >&2 "Must enter two arguments you dumbo"
    exit 1
fi

要测试文件或目录,请使用conditional expressions

if [[ ! -e $2 ]]; then 
    echo >&2 "second argument needs to be a file/directory you dumbo"
    exit 1
fi