我的文件结构是这样的。
unix% ls
NGC2201 IC0499 IC7216 NGC7169
unix% cd NGC2201
unix% ls
7019 2221 note
其中 7019 和 2221 是新目录,而 note 是我用来创建变量的文本文件。2221和7019内的内容很重要,但不需要设置为变量;我的脚本后记将处理所有这些。
我当前的脚本如下:
# The purpose of this script is to take the note files provided and set the values as variables.
#!/bin/csh -f
set z=`grep -E '^z=' note | cut -d= -f2`
set nh=`grep 'NH' note | cut -d= -f2`
set xc=`grep 'Center' note | cut -d, -f1 | cut '-d' -f4`
echo $z $nh $xc
这将设置三个变量在当前目录中使用(在这种情况下,我们将使用 NGC2201 作为父目录,并将 7019 和 2221 作为要使用这些变量的子目录)。
我的问题是如何编写脚本来自动将 NGC2201 设置为名为 $g 的变量,将 2221 设置为名为 $obs 的变量。
在脚本运行到 2221 之后,我希望它然后将目录设置为 7019 并重复这些步骤。在 NGC2201 中的目录完成后,我希望脚本移动到 IC0499,重复该过程等。
如何让脚本在目录中运行?我不能让它全球化,因为它不能太侵入;我需要它只深入两个目录才能令人满意。
如果可能,我想将它保留在 csh 中,但如果这在 tcsh 或 bash 中更容易,我完全赞成。此外,如果有比这样循环更简单的解决方案,我也完全赞成。
在
csh
中,您可以使用foreach
循环遍历当前目录中目录的每个子目录:bash
等效的是一个循环for
。当然你可以cut
像上面那样使用,而且bash
还有一个详细的参数扩展功能,所以你不需要调用任何外部的东西:echo
用您想要对变量执行的任何操作替换该行。示例运行
%
是csh
提示,$
那个bash
。引用https://www.cyberciti.biz/faq/csh-shell-scripting-loop-example/: