셸 - 반복문

김상우·2022년 8월 15일
0

Shell

목록 보기
3/4
post-thumbnail

for~in

  • 형태
for 변수 in 값1 값2 값3 ...
do
	반복문
done
  • 예시1
#!/bin/sh
sum=0
for i in 1 2 3 4 5 6 7 8 9 10
do
        hap=`expr $hap + $i`
done
echo "sum = "$hap
exit 0
  • 결과
[root@localhost ~]# sh for1.sh
sum = 55
  1. 합계를 누적하기 위한 변수를 0으로 선언
  2. i 변수에 1~10까지 반복하여 넣어 do 이후의 반복할 문장을 반복 횟수만큼 실행
    2-1. for ((i=1; i<=10 i++))이나 seq 1 10처럼 사용할 수도 있다.
  3. 처음에 선언한 변수에 i 변수의 값 누적
  • 예시2
#!/bin/sh
for fname in $(ls *.sh)
do      
        echo "-----$fname-----"
        head -3 $fname
done    
exit 0
  • 결과
[root@localhost ~]# sh for2.sh
-----andor.sh-----
#!/bin/sh
echo "filenmae"
read fname
-----cal.sh-----
#!/bin/sh
num1=100
num2=$num1+200
-----case1.sh-----
#!/bin/sh
case "$1" in
	start)
(중략)
-----parameter.sh-----
#!/bin/sh
echo "file name is <$0>"
echo "first parameter is <$1>"
-----val.sh-----
#!/bin/sh
vartest="hello world"
echo $vartest
  1. fname 변수에 ls *.sh 명령의 실행결과를 하나씩 넣어 반복문을 수행한다.
  2. 현재 디렉토리에 있는 .sh 파일 개수만큼 실행을 반복한다.
  3. 파일 이름을 출력 후 head 명령어를 통해 파일의 앞 3줄만 출력한다.

while

  • 예시1
#!/bin/sh
while [ 1 ]
do
        echo "true"
done
exit 0
  • 결과
[root@localhost ~]# sh while1.sh
true
true
true
true
true
^C

무한으로 반복하는 while문이다.

  • 예시2
#!/bin/sh
sum=0
i=1
while [ $i -le 10 ]
do
        sum=`expr $sum + $1`
        i=`expr $i + 1`
done    
echo "sum : "$sum
exit 0
  • 결과
[root@localhost ~]# sh while2.sh
sum = 55

for1.sh의 반복문을 while문으로 표현한 것이다.

  • 예시3
#!/bin/sh
echo "Insert Password"
read pw
while [ $pw != "1234" ]
do
        echo "Wrong Password"
        read pw
done    
echo "Correct"
exit 0
  • 결과
[root@localhost ~]# sh while3.sh
Insert Password
1444
Wrong Password
4321
Wrong Password
1234
Correct

정확한 패스워드를 입력받을 때 까지 반복문을 수행하는 과정이다.

until

while문과 용도는 비슷하지만 while문은 조건식이 거짓일 떄까지 반복하지만 until문은 조건식이 참일 떄까지 반복한다.
while문 예제2 번을 until문으로 바꾼다면 until[ $1 -gt 10 ]으로 바꿔야 할 것이다.

break, continue, exit, return

  • 설명
    • break
      반복문을 종료할 때 사용
    • continue
      반복문의 조건식으로 돌아가게할 때 사용
    • exit
      프로그램을 완전히 종료할 때 사용
    • return
      함수 내에서 사용될 수 있으며 함수를 호출한 곳으로 돌아가게할 때 사용
  • 예시
#!/bin/sh
echo "infinite repeat (b: break, c:continue, e:exit)"
while [ 1 ]
do
        read input
        case $input in
                b | B)
                        break;;
                c | C)  
                        echo "continue"
                        continue;;
                e | E)  
                        echo "exit"
                        exit 1;;
        esac;           
done    
echo "break"
exit 0
  • 결과
[root@localhost ~]# sh etc.sh
infinite repeat (b: break, c:continue, e:exit)
c
continue
b
break
  1. 무한반복을 수행하면서 do 이후의 문장을 계속 실행한다.
  2. b 또는 B를 입력받는 경우 break가 실행되며 while문을 종료하고 echoe "break"문장을 출력하며 다음 문장을 수행한다.
  3. c 또는 C를 누른다면 continue를 실행하면서 다시 while문의 조건식으로 돌아간다.
profile
아침엔 운동하고 밤엔 잠을 잔다.

0개의 댓글