编写脚本以在文件中搜索模式,并输出随该文件找到的行以及每行的编号。
我的脚本为
#!/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"
一如既往,非常喜欢。
答案 0 :(得分:3)
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
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