다음 문제에 대한 해결책이 필요합니다.
다음 형식으로 숫자를 인쇄하는 쉘 프로그램을 작성하십시오. 사용 하지만또는~까지루프에서 다음 프로그램을 실행하십시오.
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