Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bashshell脚本中获取终端中的多个文件_Bash_Shell_Sh - Fatal编程技术网

如何在bashshell脚本中获取终端中的多个文件

如何在bashshell脚本中获取终端中的多个文件,bash,shell,sh,Bash,Shell,Sh,。。。。。。此问题已解决。要输入文件名或任何其他变量,必须使用$1$2$3,例如,作为脚本的输入。如果您将它们放在一个特定的目录(比如说./output)中,并在父目录中调用不带变量的脚本,那么它的工作将更加灵活,因为您可以将多少文件放在其中,而不会将变量归罪,也不会捕获用于代码注入的输入。代码应该如下所示: for i in $(find ./output -name '*.out') do grep "enthalpy new" $i >&g

。。。。。。此问题已解决。

要输入文件名或任何其他变量,必须使用$1$2$3,例如,作为脚本的输入。如果您将它们放在一个特定的目录(比如说./output)中,并在父目录中调用不带变量的脚本,那么它的工作将更加灵活,因为您可以将多少文件放在其中,而不会将变量归罪,也不会捕获用于代码注入的输入。代码应该如下所示:

for i in $(find ./output -name '*.out')
    do
        grep "enthalpy new" $i >> step.txt  
    done

目前$I引用循环的迭代,因此1,2,3。。。。grep找不到这些文件,因此出现错误

有两种方法可以解决此问题。$@包含传递给脚本的参数,因此您可以尝试:

grep "enthalpy new" "$@" >> step.txt
或者,如果要循环遍历每个参数/文件,请尝试:

for fil in "$@"
do
      grep  "enthalpy new" "$fil" >> step.txt
done

欢迎来到SO。很好,你表现出了你的努力,坚持下去。请您在问题中展示输入和预期输出的示例,以便更好地理解问题中的问题(而不是评论),谢谢。只需执行grep“焓新”sample1.out sample2.out>>step.txt即可。不需要循环。for循环将从1到$#的数字写入变量i。因此,在正文中,您grep了名为1和2的文件,但没有同名文件。@RamanSailopal但脚本必须是通用的,因此如果有人想给出5.out文件,它可以执行以下操作job@RavinderSingh13谢谢你的评论。我添加了预期的结果。