You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash脚本批量创建目录、生成文件并执行命令

Bash批量处理phylip文件运行dollop的脚本修复

实现目标

  • 原始phylip文件存储路径:/home/agalvez/data/sims/phylip_format,目录下包含sim1.phylip、sim2.phylip等文件
  • 为每个.phylip文件创建对应目录
  • 每个新建目录内放入两份内容:
    • 对应.phylip原始文件的副本
    • 名为input的配置文件,内容按顺序为:
      对应phylip文件的文件名
      U
      5
      Y
      /home/agalvez/data/sims/trees/tree_nodenames.txt
      
  • 进入每个新建目录,执行命令phylip dollop < input > screenout完成分析

初始脚本报错情况

最初编写的脚本如下:

!/bin/bash

for f in *.phylip;
 mkdir /home/agalvez/data/sims/dollop/$f;
 cp $f /home/agalvez/data/sims/dollop/$f;
 cd /home/agalvez/data/sims/dollop/$f;
 echo "$f" | cat > input;
 echo "U" | cat >> input;
 echo "5" | cat >> input;
 echo "Y" | cat >> input;
 echo "/home/agalvez/data/sims/trees/tree_nodenames.txt" | cat >> input;
 phylip dollop < input > screenout;
;done

运行时直接抛出语法错误:

line 4: syntax error near unexpected token `mkdir'
line 4: ` mkdir /home/agalvez/data/sims/dollop/$f;'

问题原因

  • 脚本开头的shebang标识缺失#,不符合bash脚本规范
  • for循环语法结构错误,缺少循环体起始关键字do,分号位置错乱,导致解释器无法识别循环结构,直接在执行到mkdir行时报语法错
  • 复制源文件时未写绝对路径,若脚本未在原始phylip文件目录下运行,会出现找不到源文件的问题

可用修复脚本

#!/bin/bash

for f in *.phylip; 
 do
 mkdir /home/agalvez/data/sims/dollop/$f;
 cp /home/agalvez/data/sims/phylip_format/$f /home/agalvez/data/sims/dollop/$f;
 cd /home/agalvez/data/sims/dollop/$f;
 echo "$f" | cat > input;
 echo "U" | cat >> input;
 echo "5" | cat >> input;
 echo "Y" | cat >> input;
 echo "/home/agalvez/data/sims/trees/tree_nodenames.txt" | cat >> input;
 phylip dollop < input > screenout;
done

补充说明:运行前需确认/home/agalvez/data/sims/dollop父目录已提前创建,否则mkdir会抛出无对应路径错误;如果需要生成不带.phylip后缀的同名目录,将脚本中路径里的$f替换为${f%.phylip}即可。

内容的提问来源于stack exchange,提问作者Alex galvez morante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:36:26