루프, 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

두 개의 루프가 필요하지 않으므로 bash+ 중괄호 확장으로 충분합니다.

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

너비가 0보다 크고 시작점(음수 값 포함)에 대해 작동해야 합니다.

두 개의 루프를 사용하고 싶다면 중괄호 확장을 사용하여 내부 줄을 다시 작성하세요.

답변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

관련 정보