*Programming/[ SS ] Shell Script
[SS - 14] shell script 빈 줄 찾기 (공백 라인) + 변수 문제
사2다
2022. 2. 10. 18:13
728x90
반응형
shell script
- 명령어 혹은 함수에 공백 라인이 몇 번째 라인에 존재하는지 찾는 함수
test_print(){
echo "aaa"
echo "bbb"
echo ""
echo "ccc"
echo ""
}
find_blank_while(){
cnt=0
while read line
do
((cnt++))
if [ "$line" == "" ]; then
echo "check black of $cnt line"
fi
done
}
echo -e "\n<func blank search>"
test_print | find_blank_while
echo -e "\n<file blank search>"
cat line.txt | find_blank_while
결과
line.txt
shell script result
=================================================================
이슈 사항
- 코드 시나리오
공백라인이 있으면 checksum=0 / 공백라인이 없으면 checksum=1
조건문에 따라 전역 변수 checksum에 결과 값 저장 - 그러나, while 반복문이 끝나면 checksum에 저장이 안되는 이슈 발생
#! /bin/bash
checksum=0
#공백 라인 확인
cat tmp.txt |
while read line
do
if [ "$line" == "" ]; then
checksum=0
else
checksum=1
fi
echo "IN checksum : $checksum"
done
echo "OUT checksum : $checksum"
- while 반복문 안에 있는 checksum이랑 밖에 있는 checksum이랑 다른 상황
- 원인은 | (pipe line) 때문이라고 함
- 따라서 while 반복문 안에 checksum과 밖에 있는 checksum은 다른 변수
해결
- Pipe line을 사용하지 않고 Redirection ( < )을 통해 해결
#! /bin/bash
checksum=0
#공백 라인 확인
while read line
do
if [ "$line" == "" ]; then
checksum=0
break
else
checksum=1
fi
echo "IN checksum : $checksum"
done < tmp.txt
echo "OUT checksum : $checksum"
728x90