我的KornShell(ksh)脚本接收命令行参数作为输入。 我的任务是检查这些参数是否包含abc,并只打印那些含有abc的参数。 例如: -如何在KornShell脚本中搜索字符串中的特定字符?
./tree.sh rabc try qwerty
输出应该是::
rabc
这是我曾尝试:
var=$*
z=grep "abc" var
echo $z
任何有识之士对此?
我的KornShell(ksh)脚本接收命令行参数作为输入。 我的任务是检查这些参数是否包含abc,并只打印那些含有abc的参数。 例如: -如何在KornShell脚本中搜索字符串中的特定字符?
./tree.sh rabc try qwerty
输出应该是::
rabc
这是我曾尝试:
var=$*
z=grep "abc" var
echo $z
任何有识之士对此?
首先,您需要能够遍历参数。如果我们看一看man ksh
,我们发现以下:
for vname [ in word ... ] ;do list ;done
每次执行
for
命令时,vname
设置为从in word
名单采取的下一个word
。如果省略in word ...
,则for
命令对从1开始设置的每个位置参数执行do list
(参见下面的参数扩展)。当列表中没有更多单词时,执行结束。我们正在运行<stuff>
for arg do <stuff> done
在点,
$arg
将传入的参数之一,注意你所需要的:
所以得到循环,我们需要这样的事情。 $
部分在前面; ksh要求这个知道使用存储在变量中的值,而不仅仅是原来的变量名。
接下来,我们需要确定$arg
是否包含abc
。我们将使用grep
,但请记住grep
通过您提供的文件或通过标准输入(“标准输入”)传入的内容进行查看。您提供的grep "abc" var
将有grep
尝试在名为var
的文件中查找abc
。
我们需要将$arg
转换为grep
的标准输入。我们将使用echo
,这使事情到标准输出(“标准输出”)和“管”,其中加入一个命令的标准输入到另一个的stdout:
echo "$arg" | grep abc
上面会放置任何在$arg
到标准输入,那么grep
只有在包含abc
时才会打印。
因此,完整的脚本如下:
#!/bin/ksh
for arg
do
echo "$arg" | grep abc
done
这将不能正确处理其中的参数包含换行符的情况;我会把它作为未来的问题让你解决问题。
我可以存储由echo“$ arg”返回的值吗?在变量中的grep abc?因为当我做var = echo“$ arg”| grep abc,$ var中没有显示任何内容..请帮助 – user1466466
@ user1466466:您需要使用“命令替换”:'var = $(echo“$ arg”| grep abc)'。如果没有这些,ksh无法告诉您想要存储字符串“echo ...”,并且希望将运行该字符串的输出存储为命令。 –
如果您还显示您尝试过的内容,这将有所帮助。其他人则可以帮助你了解哪里出了问题。简单地提供一个需求并希望其他人给你提供完整的解决方案通常在[so]上被忽视。 –
你试过的是什么问题?你是如何解决它的? –