2017-02-04 32 views
2

私は2つの整数をとり、その間にあるすべての数字を出力するBashスクリプトに取り組んでいます。与えられた2つの数字の間にあるすべての数字を出力します。

入力:

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

代わりの何かが動作しないことを言ってを持っている場合、*それが動作しない理由*説明 - あなたは何を期待し、あなたの代わりに何を取得しています。 (一般的にはhttp://stackoverflow.com/help/how-to-ask、特に、http://stackoverflow.com/help/mcveを参照してください)。 –

+0

ところで、{}}ボタンを使用して、それを含むように書式設定するコード領域を選択したら、それを使用します。 –

+0

ヒント:ところで、コマンドライン引数は入力とは別です。 'read'はstdinから読み込みますが、コマンドラインであなたのスクリプトに渡される引数は配列' '$ @" 'にあり、' '$ 1" '、' '$ 2" 'などでも参照できます。 –

答えて

0

あなたの投稿コードが、それはあなたの実際のコードかどうかわからない、適切に整列されていない参照してください。しかし、整列以外の問題は、あなたがwhile文でmyvar2の$を逃したことだけです。

read myvar 
read myvar2 

while [ $myvar -le $myvar2 ] 
do 

    echo $myvar 
    myvar=$(($myvar+1)) 

    #//timer in-between numbers 

    sleep .5 

done 
+0

もちろんもちろん//いいえ – Shiping

2

バッシュはdouble parenthesis構文を使用してループのcスタイルをサポートします。

$ 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

ブレース展開と

$ 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++}' 
+0

'3'と' 10'が位置パラメータであれば、これはスクリプトで使うことはできません。 –

+0

はい、その場合evalが必要です。 – karakfa

関連する問題