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