我正在研究一个Bash脚本,它接受两个整数并输出两者之间的所有数字。它看起来像这样:
输入:
bash testScript 3 10
3
4
5
6
7
8
9
10
这是我写的一些代码,我认为它会起作用,但我还没有太多运气让它工作起来。
read myvar
read myvar2
while [ $myvar -le myvar2 ]
do
echo $myvar
myvar=$(($myvar+1))
//timer in-between numbers
sleep .5
done
答案 0 :(得分:2)
Bash使用double parenthesis结构支持c
样式for循环:
$ for ((x=3; x<=10; x++)); { echo $x; }
3
4
5
6
7
8
9
10
或者,支撑扩展:
$ for i in {3..6}; do echo $i; done
3
4
5
6
大括号扩展问题是您需要使用eval
来使用变量......
一个常见的GNU实用程序是seq,但它不是POSIX,因此可能不在每个* nix上。如果你想在Bash中编写类似的函数,它将如下所示:
my_seq ()
# function similar to seq but with integers
# my_seq [first [incr]] last
{
incr=1
start=1
if [[ $# -gt 2 ]]; then
start=$1
incr=$2
end=$3
elif [[ $# -gt 1 ]]; then
start=$1
end=$2
else
end=$1
fi
for ((x=start; x<=end; x+=incr)); { echo $x; }
}
然后用1,2或3个参数调用它:
$ my_seq 30 10 60
30
40
50
60
答案 1 :(得分:1)
支撑扩展
$ echo {3..10} | tr ' ' '\n'
或包含eval
$ a=3; b=10; eval echo {$a..$b} | ...
或者,如果您有awk
$ awk -v s=3 -v e=10 'BEGIN{while(s<=e) print s++}'
答案 2 :(得分:0)
使用位置参数:
myvar=$1
myvar2=$2
while [ $myvar -le $myvar2 ]
do
echo $myvar
myvar=$(($myvar+1))
#timer in-between numbers
sleep .5
done
输出:
scottsmudger@ns207588:~ $ bash test 1 5
1
2
3
4
5
答案 3 :(得分:0)
您发布的代码未正确对齐,不确定它是否是您的实际代码。但是除了对齐之外,只有你在错误的时候错过了myvar2的$。
canvas.delete(line)