从bash脚本调用grep

Car*_*ers 0 bash grep

我是bash脚本的新手(和*nix shell一样),但我正在尝试编写这个脚本,以便更轻松地使用代码库.

我写过这个

#!/bin/bash
args=("$@");
for arg in args
 grep arg * */* */*/* */*/*/* */*/*/*/*;
done
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,会发生这种情况:

~/Work/richmond $ ./f.sh "\$_REQUEST\['a'\]"
./f.sh: line 4: syntax error near unexpected token `grep'
./f.sh: line 4: `       grep arg * */* */*/* */*/*/* */*/*/*/*;'
~/Work/richmond $

我该怎么做呢?

而且,我认为一个更重要的问题是,如何才能使grep像这样通过子目录进行递归?

使用shell脚本和使用bash的任何其他技巧和/或陷阱也将受到赞赏.

Joh*_*ica 9

语法错误是因为你错过了do.至于递归搜索,如果你grep-R选择,你会做:

#!/bin/bash
for arg in "$@"; do
   grep -R "$arg" *
done
Run Code Online (Sandbox Code Playgroud)

否则你可以使用find:

#!/bin/bash
for arg in "$@"; do
   find . -exec grep "$arg" {} +
done
Run Code Online (Sandbox Code Playgroud)

在后一个示例中,find将从当前目录开始,使用它找到的文件名执行grep和替换{}大括号..

(请注意,我也改变arg"$arg"你需要的美元符号来获取变量的值,并引号告诉shell将它的值作为一个大的话,即使$arg包含空格或换行符.)