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

+ Recent posts