읽는 줄 문제

읽는 줄 문제

lst 파일을 보고 행을 읽고 인쇄해야 하는 스크립트가 있습니다. 목록에 아무것도 없으면 스크립트를 종료해야 하지만 아래 스크립트는 자체적으로 반복되고 lst 파일에 두 개의 숫자가 있습니다( 남자, 뽕나무).

vi do.lst 
man
san

코드: =

  cat /ora/do.lst
  while read -r line
  do
   if [[ -z $line ]]
     then
         echo "The list is empty "
          exit
  else
      lst_no=${line},
      echo "${line} is processing now "
  fi
  done

답변1

cat모든 것이 괜찮아 보입니다. 루프에 a를 전달하기만 하면 됩니다 .

cat /ora/do.lst |  while read -r line
  do
   if [[ -z $line ]]
     then
       echo "The list is empty "
       exit
     else
      lst_no=${line},
      echo "${line} is processing now "
   fi
done

이것은 분명히 생산 라인을 처리하는 가장 좋은 방법은 아니지만 단지 학습 목적일 뿐이라고 생각합니다.


더 좋은 점은 최소한 쓸모없고 cat불필요한 파이프를 피하는 것입니다.

while read -r line; do
...
done </ora/do.lst

또는 더 나은 방법은 루프 내의 명령에 대한 표준 입력을 예약하는 것입니다.

while read -r line <&3; do
...
done 3</ora/do.lst

awkperl그러나 파일에 줄이 많은 경우 텍스트 처리 작업을 위해 특별히 설계된 도구나 다른 도구를 사용하여 스크립트를 다시 작성 하는 것이 좋습니다 . 이와 관련하여 쉘 루프는 최적화되지 않습니다.

관련 정보