在Echo bash-scrip中写一个循环



我使用bash脚本为程序生成输入文件。BASH脚本生成随机数的列表,然后写入输入文件。我的bash脚本有两个部分,其中第一部分生成随机数列表,第二部分使用随机数来构建输出文件内容。

   # 1- Generate Random Numbers
    for i in {1..200}
    do
    ARRAY+=($((RANDOM%885+0)))
    done
    echo "
    ${ARRAY[*]}
    "> random_numbers.txt
# 2- construction of output file    
echo "
# Packmol input file
filetype pdb
output peg_$(($npeg)).pdb
# selecting the structure according random number
structure peg${ARRAY[0]}.pdb
  number 1
  inside cube -$d. -$d. -$d. $d.
end structure
structure peg${ARRAY[1]}.pdb
  number 1
  inside cube -$d. -$d. -$d. $d.
end structure
structure peg${ARRAY[2]}.pdb
  number 1
  inside cube -$d. -$d. -$d. $d.
end structure
structure peg${ARRAY[3]}.pdb
  number 1
  inside cube -$d. -$d. -$d. $d.
end structure
structure peg${ARRAY[4]}.pdb
  number 1
  inside cube -$d. -$d. -$d. $d.
end structure
continued *****
structure peg${ARRAY[24]}.pdb
  number 1
  inside cube -$d. -$d. -$d. $d.
end structure
"> output.inp

如果我可以通过更改数组编号在下面给出的重复行上运行不同范围(25、50、75 ...)的循环(25、50、75 ...),是否有办法?

structure peg${ARRAY[*]}.pdb
  number 1
  inside cube -$d. -$d. -$d. $d.
end structure
{
  # write header
  printf '%sn' '# Packmol input file' 'filetype pdb' "output peg_$((npeg)).pdb"
  # iterate over array contents
  for value in "${ARRAY[@]}"; do
    printf '%sn' 
      "structure peg${value}" 
      '  number 1' 
      '  inside cube -$d. -$d. -$d. $d.' 
      'end structure'
  done
} >output.inp

...要仅采用每25个项目,请按以下方式修改内部循环:

  # iterate over array contents
  for ((i=0; i<${#ARRAY[@]}; i+=25)); do
    printf '%sn' 
      "structure peg${ARRAY[$i]}" 
      '  number 1' 
      '  inside cube -$d. -$d. -$d. $d.' 
      'end structure'
  done

注意:

  • 对于整个块,我们只进行重定向。将>>output.inp放在一堆单独的命令上,每次重新打开文件,使其非常低效。
  • {start..end..count}语法是非常限制的(不能使用变量),因此循环语法的C风格是强烈的。

相关内容

  • 没有找到相关文章

最新更新