私はこのスクリプトを実行しようとしましたが、10進数の0.2224のために「badlyformed number」というエラーが表示されます。整数に置き換えれば、スクリプトは正常に機能します。
#!/bin/csh -f
set shift="-1 2 "
foreach d ($shift)
@ z = $d * "0.2224"
awk -v k=$d 'FNR==3{$1+=4*k;}1' Lat | cat >>head
awk -v k=$d '{$2+=k;}1' f1 | cat >>g1
awk -v k=$d '{$2+=3*k;}1' f2 | cat >>g2
cat head g1 g2 > POSCAR-$z
rm head
rm g1
rm g2
シェル変数は数字ではなく文字列です。 2
または"0.2224"
と入力すると、文字列として表示されます。シェルはいくつかの単純なデータ変換を処理できるため、10進表現が機能する場合があります。しかし、浮動小数点値は機能しません。
シェルで計算を行うには、bc
を介して値をパイプ処理し、それをコマンド置換(コマンドのバックティックラッパー)と組み合わせます。
set d = 2
set result = `echo "$d * 0.2224" | bc`
echo $result
この例の構文はcsh/tcsh
向けに書かれていますが、原則はbash
でも機能します。これよりも複雑なものが必要な場合は、代わりにpython
でスクリプトを実装することをお勧めします。
ステートメント "set shift ="-1 2 ""は、このエラー「不正な形式の番号」を引き起こします。 cshスクリプトでは、操作文字と変数または数字の間にスペースが必要です。そのため、「set shift = "-1 2"」になります。