2014-10-12 130 views
0

我有一个名为fruit.txt的文件,其中包含水果名称列表(apple,banana.orange,kiwi等)。我想创建一个脚本,允许我在调用脚本时传递参数,即script.sh orange,然后使用grep搜索变量(orange)的文件fruit.txt。我有以下脚本...如何传递一个shell脚本参数作为执行grep命令时要使用的变量

脚本的名称和参数如下: script.sh橙色

脚本片段如下:

#!/bin/bash 
nameFind=$1 
echo `cat` "fruit.txt"|`grep` | $nameFind 

但我得到的信息的grep命令的使用,它似乎脚本正在等待一些额外的命令等建议非常感谢。

回答

2

的管道语法不正确那里。您正在将grep的输出作为输入传递给名为nameFind的变量。所以当grep命令尝试执行时,它只会获取fruit.txt的内容。请改为:

#!/bin/bash 
nameFind=$1 
grep "$nameFind" fruit.txt 
+0

请在变量引用(例如'grep“$ nameFind”fruit.txt“)周围使用双引号以避免不必要的单词分割和通配符扩展。没有他们,像'script.sh'这样的激情水果''会失败。 – 2014-10-12 21:28:59

+0

谢谢。不知道。 – dramzy 2014-10-12 21:31:14

2

像这样的东西应该工作:

#!/bin/bash 

name="$1" 
grep "$name" fruit.txt 

有没有必要使用catgrep在一起;您可以简单地将该文件的名称作为第三个参数传递给要匹配的模式之后。如果你想匹配固定的字符串(即没有正则表达式),你也可以使用-F修改:

grep -F "$name" fruit.txt 
相关问题