이제 다양한 문자를 쓸 줄 알았으니
Loop와 같이 반복문을 알아보자
쉘 스크립트에서는 반복문도 사용할 수 있다.
C 언어에서의 for를 똑같이 쓴다.
다만 형식만 다르다.
for.sh
#!/bin/sh
for i in 1 2 3 4 5
do
echo "Looping ... number $i"
done
결과는??
for2.sh
#!/bin/sh
for i in hello 1 * 2 goodbye
do
echo "Looping ... i is set to $i"
done
결과는??
?? 2번째는 조금 이상하다.라고 느낄 수 있다.
하지만 argument 대로 정상적으로 들어왔다.
argument를 for 문에서 정상적으로 설정해야 의도한대로 된다는 것을 명심하자
그 다음은 while 반복문이다.
while.sh
#!/bin/sh
INPUT_STRING=hello
while [ "$INPUT_STRING" != "bye" ]
do
echo "Please type something in (bye to quit)"
read INPUT_STRING
echo "You typed: $INPUT_STRING"
done
입력한 대로 출력해주는 쉘 스크립트로 bye 입력이 들어오기 전까지 반복한다.
while 문에서 유의할 것은 : (colon)은
조건문에 들어간다면 항상 true로 해석되므로 잘 써야 한다.
예를 들면
while2.sh
#!/bin/sh
while :
do
echo "Please type something in (^C to quit)"
read INPUT_STRING
echo "You typed: $INPUT_STRING"
done
직접 인터럽트를 걸어줘야 break 될 수도 있다.
둘 다 괜찮게 쓰인다.
while문은 파일을 읽을 때도 유용하게 쓰인다.
while3.sh
#!/bin/sh
while read input_text
do
case $input_text in
hello) echo English ;;
howdy) echo American ;;
gday) echo Australian ;;
bonjour) echo French ;;
"guten tag") echo German ;;
*) echo Unknown Language: $input_text
;;
esac
done < myfile.txt
input_text를 계속 읽는 것이다.
다만 input_text의 조건은 \n (new line) 으로 끝나야 한다.
비어있는 라인이 있으면 절대 안된다.
다시 돌아와서 말하면
저 while 문은 1번 루프 돌 때 1개의 라인을 읽는다.
그 후에는 case 에서 input_text의 값을 감지한다.
만약 단어가 myfile.txt에서 읽혀서 hello라는 단어가 왔다면 해당 라인을 실행하게 되는 것이다.
또한 case 문의 default 같이
모두 매칭되지 않을 때 실행하는 라인도 설정해 주어야 한다.
여기서 case 문을 끝낼 때는 case 문을 거꾸로한 esac을 써야 된다는 것을 잊지 말자.
'DevOps > Shell' 카테고리의 다른 글
Shell Script - 7, Case (0) | 2022.11.24 |
---|---|
Shell Script - 6, Test (0) | 2022.11.24 |
Shell Script - 4, escape character (0) | 2022.11.23 |
Shell Script - 3, Wildcard (0) | 2022.11.23 |
Shell script 11, Tip (0) | 2022.11.22 |