私のファイル構造はこのようなものです。
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
これにより、現在のディレクトリで使用する3つの変数が設定されます(この場合、NGC2201を親ディレクトリとして使用し、7019および2221をこれらの変数のサブディレクトリとして使用します)。
私の質問は、NGC2201を$ gという名前の変数として、2221を$ obsという変数として自動的に設定するスクリプトを作成する方法です。
スクリプトが2221を実行した後、ディレクトリを7019に設定し、手順を繰り返したいと思います。 NGC2201内のディレクトリが終了したら、スクリプトをIC0499に移動し、プロセスを繰り返すなどしてください。
ディレクトリを介してスクリプトを実行するにはどうすればよいですか?あまりにも邪魔にならないため、グローバル化することはできません。満足のいくように、2つのディレクトリに移動するだけで十分です。
可能であればcsh内に保持したいと思いますが、tcshまたはbashでこれが簡単な場合は、それだけです。さらに、このようにループするよりも簡単な解決策があれば、私もそのすべてです。
csh
では、foreach
ループを使用して、現在のディレクトリ内のディレクトリのすべてのサブディレクトリをループできます。
foreach i (*/*/)
set g=`echo $i | cut -d/ -f1` # slash-delimited, select first field
set obs=`echo $i | cut -d/ -f2` # slash-delimited, select second field
echo $g $obs
end
同等のbash
は、for
ループです。もちろん、上記のようにcut
を使用できますが、bash
には詳細な Parameter Expansion 機能もあるため、外部から呼び出す必要はありません。
for i in */*/; do
g=${i%%/*} # cut everything from the first slash
obs=${i#*/} # cut everything until first slash
obs=${obs%/} # cut slash at the end
echo $g $obs
done
echo
行を、変数で実行するものに置き換えます。
%
はcsh
プロンプト、$
はbash
プロンプトです。
% tree
.
├── IC0499
├── IC7216
│ └── 2222
├── NGC2201
│ ├── 2221
│ ├── 7019
│ └── note
└── NGC7169
7 directories, 1 file
% foreach i (*/*/)
? set g=`echo $i | cut -d/ -f1`
? set obs=`echo $i | cut -d/ -f2`
? echo $g $obs
? end
IC7216 2222
NGC2201 2221
NGC2201 7019
$ for i in */*/; do g=${i%%/*}; obs=${i#*/}; obs=${obs%/}; echo $g $obs; done
IC7216 2222
NGC2201 2221
NGC2201 7019
引用 https://www.cyberciti.biz/faq/csh-Shell-scripting-loop-example/ :
csh
は多くの革新的な機能で人気がありましたが、csh
はスクリプトではあまり人気がなかったことに注意してください。システムレベルのrcスクリプトを記述する場合は、csh
の使用を避けてください。他のシステムで実行する必要があるスクリプトには、/bin/sh
を使用できます。