我正在尝试使用倍数间隔作为参数运行程序。我在shell脚本中使用for循环来执行此操作。但是,我只能逐步运行此代码,如下所示。我想知道是否有办法在单个命令行中运行此命令。我刚开始学习shell语言。我已经尝试了一些命令的组合,例如do和then,但是没有成功。欢迎任何形式的帮助。
谢谢,
for K in 1 $(seq 1 5000000 160000000)
> do
> J=$((K+5000000))
> impute2 -phase -m ../impute2_chr1.map -g ../CHR1_17_04_17.gz -int $K $J -Ne 20000 -o phasing_CHR1_${K}_${J}
> done
答案 0 :(得分:1)
for K in 1 $(seq 1 5000000 160000000); do J=$((K+5000000)); impute2 -phase -m ../impute2_chr1.map -g ../CHR1_17_04_17.gz -int $K $J -Ne 20000 -o phasing_CHR1_${K}_${J};done
我觉得'做'不需要自己的;总是有点反直觉,但否则很容易理解。顺便说一下,'then'和'else'遵循相同的逻辑,如:
if [[ 'x' == 'y' ]];then echo 'yes'; else echo 'no'; fi
满足评论:你用;替换换行符。如上所述,除了'do','else','then'之外。如果有疑问,创建一个更简单的形式的东西,看看在哪里;应该用它来使它工作,然后做更复杂的形式。
答案 1 :(得分:1)
在bash中,不同的说明由换行符\n
或;
分隔,但是在多行上构建代码会让您更快地阅读和掌握,因此我建议您离开除非你有特殊需要,否则它会在多行上排除,但我现在无法想到。
答案 2 :(得分:1)
在HOME目录中创建一个名为go
的文件,如下所示:
#!/bin/bash
for K in 1 $(seq 1 5000000 160000000); do
J=$((K+5000000))
impute2 -phase -m ../impute2_chr1.map -g ../CHR1_17_04_17.gz -int $K $J -Ne 20000 -o phasing_CHR1_${K}_${J}
done
现在使用:
使该文件可执行(只需执行一次)chmod +x $HOME/go
现在,您可以通过输入以下命令运行多次:
$HOME/go
如果您希望学生能够运行它,请将其存储在/usr/local/bin/go
中,并将$HOME
更改为/usr/local/bin
。