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
'*Programming > [ SS ] Shell Script' 카테고리의 다른 글
[SS - 15] shell 에러 출력 안나오게 하기 (/dev/null) (0) | 2022.02.11 |
---|---|
[SS - 13] shell script 함수 (function) (0) | 2022.01.11 |
[SS - 12] script에서 linux 명령 실행 (0) | 2021.12.30 |
[SS - 11] 여러 줄 입/출력 하기 EOF(End Of File) (0) | 2021.12.30 |
[SS - 10] 파일 실행 시 root 권한 확인 (0) | 2021.12.30 |