打印两个给定数字之间的所有数字

时间:2017-02-04 19:42:04

标签: bash shell

我正在研究一个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

4 个答案:

答案 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

请参阅http://www.tldp.org/LDP/abs/html/othertypesv.html

答案 3 :(得分:0)

您发布的代码未正确对齐,不确定它是否是您的实际代码。但是除了对齐之外,只有你在错误的时候错过了myvar2的$。

canvas.delete(line)