ループ、Until、Whileを使用したシェルプログラミングの質問

ループ、Until、Whileを使用したシェルプログラミングの質問

次の問題に対する解決策が必要です。

次の形式で数値を印刷するシェルプログラムを作成します。 使用 しかし、または~までループで次のプログラムを実行します。

1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9

私が書いたスクリプトはループまで。私が間違えたことがあれば訂正してください。

#!/bin/bash

w=1
until [ $w -le 9 ] ; do
    until [ $w -eq 4 ] ; do
        w=`expr $w + 1`
        echo “$w”
    done
    echo “$w”
done

答え1

2つのループは必要ないので、bash+中括弧拡張で十分です。

i=0; width=4; max=9
until [ $((i++)) -ge $((max-width+1)) ]; do
    eval echo {$i..$((i+width-1))}
done

幅は0より大きく、開始点(負の値を含む)に対して機能する必要があります。

2つのループを使用したい場合は、中括弧拡張を使用して内部行を再構築してください。

答え2

width=4
max=9

decr=$(($width-1))
for w in $(seq $(($max-$decr)))
do
    seq -s' ' $w $(($w+$decr))
done

答え3

単純なネストループを使用して、幅と最大変数なしでこのコードを書くことはできますか?

次のように:-

w=1
until [ $w -le 9 ] ; do
    until [ $w -eq 4 ] ; do
        w=`expr $w + 1`
        echo “$w”
    done
    echo “$w”
done

答え4

b=1
while [ $b -le 6 ]
do
echo -n $b `expr $b + 1` `expr $b + 2` `expr $b + 3`
echo
b=`expr $b +1`
done

関連情報