파이프( | )와 변수 처리
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"
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 다음에 변수를 선언해야하는 것 같은데
어떻게 해야하는지 잘 모르겠다..;;