我的KornShell (ksh)脚本接收命令行参数作为输入。我的任务是检查这些参数中是否包含abc,并只打印其中包含abc的参数。例如:-
./tree.sh rabc try qwerty产出应是:
rabc这就是我尝试过的:
var=$*
z=grep "abc" var
echo $z对此有什么见解吗?
发布于 2013-01-16 13:22:46
首先,您需要能够遍历参数。如果我们查看一下man ksh,我们会发现以下内容:
单词中的名字.;做列表;完成 每次执行
for命令时,都会将vname设置为从in word列表中提取的下一个word。如果省略了in word ...,那么for命令对从1开始设置的每个位置参数执行一次do list(参见下面的参数扩展)。当列表中没有更多的单词时,执行就会结束。
因此,要得到循环,我们需要这样的东西:
for arg
do
<stuff>
done在我们运行<stuff>时,$arg将是传入的参数之一。注意,您需要前面的$部件;ksh要求它知道如何使用存储在变量中的值,而不仅仅是变量名。
接下来,我们需要确定$arg是否包含abc。我们将使用grep,但请记住,grep会查看您给它的文件,或者查看它的标准输入("stdin")中传递的任何内容。您提供的grep "abc" var将让grep尝试在一个名为var的文件中查找abc。
我们需要将$arg输入到grep的stdin中。我们将使用echo,它将东西放入标准输出("stdout"),并使用一个“管道”,它将一个命令的stdin与另一个命令的stdout连接起来:
echo "$arg" | grep abc上面的内容将把$arg中的任何内容放到stdin上,然后grep只在包含abc的情况下才会打印它。
因此,完整的脚本如下:
#!/bin/ksh
for arg
do
echo "$arg" | grep abc
done这不能正确地处理参数包含换行符的情况;我将把它作为未来的问题留给您自己解决。
https://stackoverflow.com/questions/14356216
复制相似问题