我一直在尝试构建一个允许我执行动态grep搜索的函数 - 动态,如果在调用函数时指定了多个变量,那么它将通过grep传递附加变量。我真的不需要超过2个变量,但也有兴趣学习如何做到这一点。
所需功能的示例:
> function word1 word2
结果:
(
cd /path/folder;
less staticfile | grep -i word1 | grep -i --color word2
)
如果总有两个单词,上面的作品很棒。我试图学习如何使用if和then语句来让我在变量数量上保持灵活性。
function ()
{
if [ ! "$#" -gt "1" ];
then
(
cd ~/path/folder;
less staticfile | grep -i $1 | grep --color -i $2
)
else
(
cd ~/path/folder;
less staticfile | grep --color $1
)
fi
}
当我运行此功能时,它似乎正好相反 -
> function word1
返回错误,因为它正在使用"然后"声明由于某种原因但没有任何内容可以插入到第二个grep调用中。
> function word1 word2
只有greps" word1" - 因此正在使用" else"声明。 我究竟做错了什么?有没有更简单的方法呢?
答案 0 :(得分:0)
我认为这会做你想要的。你可以实现它的功能。 (注意grep之后的间接使用。)这是代码后跟测试文件&输出。 (取任何args。)
#!/bin/bash
if [[ $# -lt 2 ]]; then
echo -e "\nusage: ./prog.sh file grep-string1 grep-string2 grep-string3...\n"
echo -e "At least two arguments are required. exiting.\n"
exit 5
fi
fname=$1 # always make your file name the first argument
i=2 # initialize the argument counter
cmd="cat $fname"
while [[ $i -le $# ]]; do
cmd=${cmd}" | grep ${!i}"
(( i++ ))
done
eval $cmd
因此,此输入文件可能被称为tfile,内容为:
a circuit
pavement
bye
以这种方式运行代码:
./prog.sh tfile e ye
bye