Я пытался запустить этот скрипт, но он дает ошибку, "плохо сформировал число" из-за десятичных 0.2224. Если я заменяю его каким-либо целым числом, сценарий хорошо работает.
#!/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
Переменные Shell являются строками, не числами. Когда Вы вводите 2
или "0.2224"
, это рассматривается как строка. Оболочка может обработать некоторое простое преобразование данных, таким образом, десятичные выражения могут работать; но значения с плавающей точкой не будут работать.
Чтобы сделать математику в оболочке, можно передать значения по каналу через bc
и объединение, что с заменой команды (обертки обратной галочки вокруг команды):
set d = 2
set result = `echo "$d * 0.2224" | bc`
echo $result
Синтаксис этого примера записан для csh/tcsh
, но принцип работает в bash
также. При необходимости в чем-то более сложном, чем это можно хотеть реализовать сценарий в python
вместо этого.
Оператор "сдвиг набора = "-1 2" "вызывает эту ошибку, "плохо сформировал число". В csh сценариях должно быть пространство между операционными символами и переменными или числом. Таким образом, это должно быть" установлено сдвиг = "-1 2".