注意:我不是在问这个问题
我查找了有关如何循环一系列不连续数字(如0,1,2,4,5,6,7,9,11)的信息,而无需手动输入数字并仍然使用范围.
显而易见的方法是这样做:
for i in 0 1 2 4 5 6 7 9 11; do echo $i; done
Run Code Online (Sandbox Code Playgroud) 我正在尝试将gnu与一些基本的生物信息学工具并行使用,例如lastz.所以说我有10个seqs,我想在所有这些上使用lastz,我使用:
parallel --dryrun lastz 'pathToFile/seq{}.fa query.fasta --format=text > LASTZ_results_seq{}' ::: {1..10}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常并返回:
lastz pathToFile/seq1.fa query.fasta --format=text > LASTZ_results_seq1
lastz pathToFile/seq2.fa query.fasta --format=text > LASTZ_results_seq2
lastz pathToFile/seq3.fa query.fasta --format=text > LASTZ_results_seq3
...
lastz pathToFile/seq10.fa query.fasta --format=text > LASTZ_results_seq10
Run Code Online (Sandbox Code Playgroud)
但理想情况下,我希望这一步是bash脚本的一部分,它需要三个命令行参数,所以seqs的数量(例如1到10)在命令行中给出($ 2 = startValue,$ 3 = endValue值).我认为改变它可以工作:
parallel --dryrun lastz 'pathToFile/seq{}.fa query.fasta --format=text > LASTZ_results_seq{}' ::: {"$2".."$3"}
Run Code Online (Sandbox Code Playgroud)
但相反,返回
lastz pathToFile//seq\{\1..\10\} query.fasta --format=text > LASTZ_results_seq\{\1..\10\}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这里我做错了什么?看起来它将2美元解释为1,将3美元解释为10,但后来却没有将其视为一系列数字......
例如我想从以下位置下载数据: http: //nimbus.cos.uidaho.edu/DATA/OBS/
与链接:
http://nimbus.cos.uidaho.edu/DATA/OBS/pr_1979.nc
到
http://nimbus.cos.uidaho.edu/DATA/OBS/pr_2015.nc
我怎样才能编写一个脚本来下载所有这些?以及wget如何循环从 1979 年到 2015 年的链接?
我用循环遍历命令,for i in {1..n}并希望输出文件具有n扩展名。
例如:
for i in {1..2}
do cat FILE > ${i}_output
done
Run Code Online (Sandbox Code Playgroud)
但是n是用户的输入:
echo 'Please enter n'
read number
for i in {1.."$number"}
do
commands > ${i}_output
done
Run Code Online (Sandbox Code Playgroud)
循环滚动一段n时间-效果很好,但是我的输出看起来像这样{1..n}_output。
如何在这样的循环中命名文件?
编辑
还尝试了这个
for i in {1.."$number"}
do
k=`echo ${n} | tr -d '}' | cut -d "." -f 3`
commands > ${k}_output
done
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
所以我正在编写一个 for 循环并遇到一些错误,以了解我写的错误
#! /bin/bash
b=${1:- 10}
echo $b
for i in {0..$b}
do
echo "$i"
done
Run Code Online (Sandbox Code Playgroud)
所以如果我跑./forloop.sh 10
我明白了
10
{0..10}
Run Code Online (Sandbox Code Playgroud)
当我有一个变量作为第二个参数时,为什么范围不起作用?
如何在for循环数字中使用变量?
例如:
num="12"
for i in {0..$num}; do
...
done
Run Code Online (Sandbox Code Playgroud) 我知道要循环使用字母表,可以做到
for c in {a..z}; do something; done
Run Code Online (Sandbox Code Playgroud)
我的问题是,我如何遍历第一个n字母(例如构建一个字符串),其中n是命令行中给出的变量/参数.
我搜索了SO,并且只找到了为数字做这个的答案,例如使用C风格的for循环或seq(参见例如如何迭代Bash中由变量定义的一系列数字?).我没有seq在我的环境中.
谢谢.
如果我创建一个像这样的 bash 循环,使用文字数字,一切都按预期工作:
#!/bin/bash
for i in {1..10}; do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
输出是:
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
但是如果我想在变量中使用上限,我似乎无法正确使用。这是我的四次尝试:
#!/bin/bash
n=10
for i in {1..$n}; do
echo $i
done
for i in {1.."$n"}; do
echo $i
done
for i in {1..${n}}; do
echo $i
done
for i in {1.."${n}"}; do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
现在的输出是:
{1..10}
{1..10}
{1..10}
{1..10}
Run Code Online (Sandbox Code Playgroud)
不是我想要的... :(
要清楚这个问题:
如何在 bash for 循环中使用变量作为范围语法的限制?
我仍在学习如何shell脚本,并且面临着使我更容易回显“ Name1”“ Name2” ...“ Name15”的挑战,但我不太确定从哪里开始。的想法,但如果我搞砸了,我不想显得傻。有什么帮助吗?
我实际上还没有尝试过任何东西,但大多数人都只是想过。
#This is what I wrote to start
#!/bin/bash
echo "Name1"
echo "Name2"
echo "Name3"
echo "Name4"
echo "Name5"
echo "Name6"
echo "Name7"
echo "Name8"
echo "Name9"
echo "Name10"
echo "Name11"
echo "Name12"
echo "Name13"
echo "Name14"
echo "Name15"
Run Code Online (Sandbox Code Playgroud)
我的预期结果显然只是为了输出“ Name1”,“ Name2”等。但是我正在寻找一种更具创造性的方法。如果可能的话,可以通过几种方式做到这一点,以便我学习。谢谢。