1

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

我有脚本

#!/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"

一如既往,非常爱。

4

3 回答 3

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
于 2013-06-20T16:46:25.367 回答
0

对于参数的数量使用$#

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

对于第二个看看test。它有各种你可以测试的东西: -d一个目录和-f 一个普通文件。您可以检查各种各样的东西,例如符号链接和命名管道。

于 2013-06-20T16:46:18.183 回答
0

您的脚本工作正常,直到它中断!如果您输入带有空格或其他有趣符号的文件名或参数,您会得到有趣的惊喜。

#!/bin/bash

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

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

对于参数的数量,我将使用变量来使用shell 算术$#,请参阅特殊参数列表

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

要测试文件或目录,请使用条件表达式

if [[ ! -e $2 ]]; then 
    echo >&2 "second argument needs to be a file/directory you dumbo"
    exit 1
fi
于 2013-06-20T16:49:44.660 回答