您好,我是 bash 脚本编写的新手,尝试读取包含我的 ids 的文本文件,并希望通过将其保存到 a$variable
并使用它来获取一些数据来循环使用它。
#!/bin/bash
file = "Cell_ids.text"
i=1
for i in file; do
i=$((i+1))
**id** = **$i**
sbatch --mem=4G --time=100 -o fetch_data.%j.out -e fetch_data.%j.err -J fetch_data <<EOF
#!/bin/bash
java -jar /docs/some-tools.jar --library ${**id**}
EOF
答案1
声明变量时,符号周围不允许有空格=
,因此file
变量不会被设置。$
当您想要迭代它时,还需要在它前面加上一个符号。
您的for
循环也永远不会关闭,要表示循环的结束,请使用关键字done
。我不确定你想做什么**id** = **$i**
,但我猜你希望你的脚本看起来更像这样:
#!/bin/bash
file="Cell_ids.text"
for i in $(cat $file); do
sbatch \
--mem=4G \
--time=100 \
-o fetch_data.%j.out \
-e fetch_data.%j.err \
-J fetch_data << EOF
#!/bin/bash
java -jar /docs/some-tools.jar --library $i
EOF
done
我删除了i=1
因为它不需要在循环之前声明,因为它会自动设置。我不熟悉sbatch
,但如果您对该命令有疑问,您可能想专门发布一个关于该命令的新问题。