외규장각 도서 환수 모금 캠페인

파이프( | )와 변수 처리

Posted 2007. 9. 27. 20:35, Filed under: Study/Computer Science
  1 #!/bin/sh
  2 if [ $# -eq 0 ]
  3 then
  4     echo "USAGE: ./newls.sh [path]"
  5     exit
  6 fi
  7
  8
  9 dcnt=0
 10 fcnt=0
 11
 12 ls $1
 13
 14 ls $1| while [ "$dcnt" -le 10 ]
 15
 16 do
 17     dcnt=`expr $dcnt + 1`
 18     fcnt=`expr $fcnt + 1`
 19
 20 done
 21
 22 echo "$dcnt diretories, $fcnt files"

유닉스 프로그래밍 과제

ls 와 같은 기능을 하면서 디렉토리와 파일의 수를 출력해주는 newls를 쉘 프로그램으로 작성하는 것

요놈 때문에 오늘 하루종일 삽질 삽질

ls $1 | while read file
do
 if [ file이 디렉토리이면]
     dcnt = `expr $dcnt + 1`
 else
     fcnt = `expr $fcnt + 1`
 fi
done

이렇게 ls랑 똑같이 하면서 디렉토리인지 아닌지만 판단해서 카운트를 해줄려고 했는데
이 간단한거 하면서 어찌나 삽질은 했는지~
게다가 어디서 삽질하는지도 모르고 있어서 오늘 하루가 다 갔다..-_-;;

먼저  test  대신에 []를 쓰려면 [ ] 앞뒤로 공백을 둬야한다는걸 몰라서 한참 에러..

dcnt = `expr $dcnt + 1` 에서 변수 1씩 증가 안되서 $((expression)) 이랑 이것저것 해봐도 안됐는데
요거 원인 찾는거도 진짜 힘들었다.

결국 알아낸 건 | (pipe) 다음에 while을 쓰니까 변수가 증가가 안된다는거.
그냥 0이 출력된다. 값을 증가시키기 위해서는 pipe 다음에 변수를 선언해야하는 것 같은데
어떻게 해야하는지 잘 모르겠다..;;

Response : ,


Recent Posts

Recent Comments

Recent Trackbacks

Total hit (Today , Yesterday )

Admin Write Post