2014-09-12 155 views
0

我想替换将写在POSCAR文件中的“c”中的“CCC”的值。但不知怎的,操作不起作用。 我得到这个错误:./script-c-b-ratio.sh: line 14: 3.24*4.78: syntax error: invalid arithmetic operator (error token is ".24*4.78")在bash脚本中定义变量

该操作确实适用于变量i和j。请提出一些建议。提前致谢!

#!/bin/bash 

for i in 3.24 3.26 
do 
     mkdir 'a_'$i 
     cd 'a_'$i 
     for j in 4.78 4.80 4.82 4.84 4.86 
       do 
       mkdir 'b_'$j 
       cd 'b_'$j 

       for k in 70.459 72.000 
       do 
       CCC = "echo $'((($k)/$(($i*$j))))'" 
       cp ../../POSCAR_default . 
       sed 's/_a_/'$i'/g' POSCAR_default > POSCAR1 
       sed 's/_b_/'$j'/g' POSCAR1 > POSCAR2 
       sed 's/_c_/'CCC'/g' POSCAR2 > POSCAR 
       rm POSCAR_default 
       rm POSCAR1 
       rm POSCAR2 
       done 
       cd .. 
       done 
cd .. 
done 
+2

请勿在作业中放置空格。 – Cyrus 2014-09-12 17:57:30

+0

@Cyrus,这应该是答案,而不是评论。 – SzG 2014-09-12 18:28:52

+0

我知道bash不会做浮点数学运算。 – 2014-09-12 18:31:32

回答

0

的问题是你的脚本处理浮点数时,bash不支持浮点运算,可以使用bc这是bash的计算器来实现浮点运算

下面替换行14代码脚本,它应该工作

CCC=$(echo "scale=3;$k/($i*$j)" | bc) 

完全参考了bc命令访问的页面https://www.gnu.org/software/bc/manual/html_mono/bc.html