리눅스의 쉘스크립트에서 중요한 흐름제어 중 하나인 for를 사용하는 방법에 대해서 알아보도록 하겠습니다.
이번엔 for 문장에 대해서 알아보겠습니다.
기본적인 사용법은 아래와 같습니다.
for variable in words; do
commands
done
사용법만 가지고는 이해가 잘 안되는데, 아래는 가장 기본적인 구조의 스크립트입니다.
변수 i에 word1,word2,word3이 순차적으로 들어간다고 보시면 됩니다.
#!/bin/bash
for i in word1 word2 word3; do
echo $i
done
아래의 예제 스크립트들과 결과를 보시면 더 잘 이해가 되시리라 생각됩니다.
ls의 결과로 나오는 값들이 순차적으로 i값이 되어 출력되는 스크립트입니다.
$cat t_for
#!/bin/bash
for i in $(ls); do
echo $i
done
$./t_for
t_for
t_position
t_sel
t_until
t_while
포지션 값들이 순차적으로 i값이 되어 출력되는 스크립트입니다.
$cat t_for
#!/bin/bash
for i in "$@"; do
echo $i
done
$./t_for a b c d abc
a
b
c
d
abc
현재 있는 디렉토리의 파일이름들이 순차적으로 i값이 되어 출력되는 스크립트입니다.
$cat t_for
#!/bin/bash
for i in *; do
echo $i
done
$vi t_for
$./t_for
t_for
t_position
t_sel
t_until
t_while
잘 이해가 되셨나 모르겠습니다.. ㅡㅡ;;
아래에는 for문을 이용하여서 2개의 txt파일 내용이 같은지 비교하는 스크립트를 만들어 보았습니다.
코드에 대해서는 주석으로 설명을 적었습니다.
$cat t_for
#!/bin/bash
# 잘못된 command가 입력되었을 때, 출력되는 함수
usage(){
echo "usage : t_for file_1 file_2"
}
# 2개의 파일이름이 입력되지 않았을 때, 실행되는 부분
if [ "$#" != "2" ]; then
echo "syntax error!"
usage
exit 1
fi
# i 와 j 는 몇 번째 단어를 비교할 것 인지를 결정
i=0
for word1 in $(cat $1); do
j=0
for word2 in $(cat $2); do
if [ $((i)) = $((j)) ]; then
# 같은 번째의 단어가 다르게 되면 메세지 출력 후 종료
if [ $word1 != $word2 ]; then
echo "The contents are not same between 2 files!"
exit 1
fi
fi
j=$((j+1))
done
i=$((i+1))
done
# 끝까지 종료되지 않으면 두 파일의 내용이 같은 것 으로 결론
echo "The contens in the 2 files are same!"
txt1,txt2,txt3 3개의 파일을 만든 뒤 txt1,txt3은 같은 내용을 저장하였습니다.
$ls -al
total 44
.....
-rw-rw-r--. 1 gyhong gyhong 26 Feb 13 16:27 txt1
-rw-rw-r--. 1 gyhong gyhong 30 Feb 13 16:35 txt2
-rw-rw-r--. 1 gyhong gyhong 26 Feb 13 16:35 txt3
실행을 하였을 때, 아래와 같이 원하는 출력이 나왔습니다.
$./t_for txt1 txt2
The contents are not same between 2 files!
$./t_for txt1 txt3
The contens in the 2 files are same!
$./t_for txt1
syntax error!
usage : t_for file_1 file_2
'IT 지식정리 > 운영체제' 카테고리의 다른 글
[리눅스] Linux 에서 연결된 스토리지,scsi, tape 장비들 확인하기 2015. 3. 7. (0) | 2017.11.04 |
---|---|
[Linux shell script 12] 리눅스 쉘스크립트에서 1>&2 의 의미 2015. 2. 17. (0) | 2017.11.04 |
[Linux shell script 10] 리눅스 쉘스크립트: 포지션(position parameter) 2015. 2. 13. (0) | 2017.11.04 |
[Linux shell script 9] 리눅스 쉘스크립트: case,while,until 사용법 2015. 2. 12. (0) | 2017.11.04 |
[Linux shell script 8] 리눅스 쉘스크립트: 키보드입력, read 2015. 2. 12. (0) | 2017.11.04 |