본문 바로가기

linux

7-2.쉘스크립트 while문

728x90
반응형

7-2. 쉘스크립트 while

문법:                  조건에 만족할 때만 루프문을 반복 수행한다 !!

while [ 조건 ]   띄어쓰기를 해야한다

do

실행문

done

 

 

예제:

i=1

while [ $i -le 10 ]

do

    echo $i

    i=`expr $i + 1`

done

 

1

2

3

4

5

6

7

8

9

10

 

 

 

문제157.

구구단 2단을 출력하시오

(while loop 문으로)

 

vi 2_dan.sh

i=1

x=''

while [ $i -le 9 ]

do

    x=`expr 2 \* $i`

    echo "2 x "$i" = "$x

    i=`expr $i + 1`

done

 

 

[orcl:~]$ sh 2_dan.sh

2 x 1 = 2

2 x 2 = 4

2 x 3 = 6

2 x 4 = 8

2 x 5 = 10

2 x 6 = 12

2 x 7 = 14

2 x 8 = 16

2 x 9 = 18

 

 

 

 

문제158.(while loop 문의 중첩)

2단부터 9단까지 출력하시오

 

vi 2_9_dan.sh

 

i=2

result=''

while [ $i -le 9 ]

do

    j=1    <-----얘가 j 초기화 역할도

    while [ $j -le 9 ]

    do

    result=`expr $i \* $j`

    echo $i x $j = $result

    j=`expr $j + 1`

    done

i=`expr $i + 1`

done

 

 

 

문제159.(while loop 이용)

아래와 같이 ★표를 찍으시오

 

[orcl:~]$ sh star.sh

숫자를 입력하세요~5

★★

★★★

★★★★

★★★★★

 

 

$ vi star.sh

echo -n "숫자를 입력하세요~"

read num

i=1

result=''

while [ $i -le $num ]

   do

   j=1

   while [ $j -le $i ]

   do

   result=$result

   echo $result

   j=`expr $j + $i`

   done

   i=`expr $i + 1`

done

 

 

 

서일답

echo -n 숫자를 입력하라 :

read num

 

star=

 

while [ $num  -ge 1 ]

    do

    echo $star

    star=$star

    num=`expr $num - 1`

    done

 

 

 

 

문제160.

아래의 power 함수를 while loop 문으로 구현하시오

SQL> select power(2,3) from dual;

8

 

$sh power.sh 2 3

 

$vi power.sh

i=1

a=$1

while [ $i -lt $2 ]

do

a=`expr $a \* $1`

i=`expr $i + 1`

done

echo $a

 

 

 

 

문제161.

while loop 문으로 팩토리얼을 구현하시오

$sh factorial.sh 5

120

 

$ vi factorial.sh 5

i=1

res=1

while [ $i -le $1 ]

do

res=`expr $res \* $i`

i=`expr $i + 1`

done

echo $res

 

 

 

문제162.

while loop 문으로 log 함수를 구현하시오

 

$sh log.sh 2 8

 

$ vi log.sh

i=1

a=$1

b=$1

while [ $b -gt 0 ]

    do

    if [ $a -eq $2 ]; then

        echo $i

        b=`expr $b - $b`   <--이걸 break 처리 해도 !

 

    else

        a=`expr $a \* $1`

        i=`expr $i + 1`

    fi

done

 

***break 써도 !!!!!!!!!!

 

소현답(나누기 방식)

i=$1

res=$2

cnt=0

while [ $i -le $2 ]

do

  res=`expr $res / $1`

  cnt=`expr $cnt + 1`

  i=`expr $i \* $1`

done

echo $cnt

 

 

 

 

문제163.(점심시간문제)

최대공약수를 while loop 문으로 구현하시오!

 

$ sh maxyaksu.sh 16 24

8

 

[orcl:~]$ sh maxyaksu.sh 52 16

4

 

 

$ vi maxyaksu.sh

 

if [ $1 -lt $2 ];then

min=$1

 

else

min=$2

fi

 

i=$min

while [ $i -gt 0 ]

do

    a=`expr $1 % $i`

    b=`expr $2 % $i`

 

   if [ $a -eq 0 ] && [ $b -eq 0 ];then

    echo $i

    break

 

   else

   i=`expr $i - 1`

 

   fi

done

 

------------------

보겸답

(최대공약수가 뺄셈으로도 가능하다는 보여줌)

i=$1

j=$2

while [ $i -gt $j ]

do

 i=`expr $i - $j`

done

echo $i

 

 

 

 

728x90
반응형

'linux' 카테고리의 다른 글

7-4.쉘스크립트_case 문  (0) 2019.04.03
7-3.쉘스크립트_csv생성  (0) 2019.04.03
7-1.쉘스크립트 for문  (0) 2019.04.03
7. 쉘스크립트 작성법  (0) 2019.04.03
6. 프로세서 관리  (0) 2019.04.03