다시 질문올려요 쉘 스크립트 입니다.
제가 짠 코드도 올리지 않고 성의없게 질문올렸던점 정말 죄송합니다.
막히는 부분을 상세하게 쓸게요 ^^;
프로그램에 대한 문제입니다.
디렉토리의 내용중 디렉토리 개수, 파일의 개수를 출력하기 위한 스크립트를 작성한다.
- 옵션이 주어지지 않을 경우, 현재 디렉토리만을 대상으로 파일 개수, 디렉토리 개수를 출력한다.
- f 옵션이 주어지면, 옵션 아규먼트에 지정된 문자열을 포함한 파일의 개수를 출력한다.
- d 옵션이 주어지면, 옵션 아규먼트에 지정된 문자열을 포함한 디렉토리의 개수를 출력한다.
- i 옵션이 주어지면, f 또는 d 옵션이 주어져야만 하며, f 또는 d 옵션 아규먼트로 지정된 문자열로 시작하는 파일 또는 디렉토리의 개수를 출력한다.
- e 옵션이 주어지면, f 또는 d 옵션이 주어져야만 하며, f 또는 d 옵션 아규먼트로 지정된 문자열로 끝나는 파일 또는 디렉토리의 개수를 출력한다.
아래가 스크립트 파일인데요
에러처리에 대한 부분은 충분히 할 수 있을것같아서 올리지 않았습니다.
일단 제가 막히는 부분은 지정한 문자열로 시작하는, 또는 끝나는 파일을 구하는건데요
find 명령어를 써서 하고있는데
order='find . -type f -name '$name' -print'
이부분을 시작하는으로 바꿨을때
find . -type f -name '$name*' -print 이라고 하게되면
만약 제가 인자로 read를 입력했을때
프로그램에서는
find . -type f -name read1 read2 read3 -print 라고 인식을 하게 되더라구요
위의 경우는 현재폴더에 read1,read2,read3이라는 파일이 존재했을 경우입니다.
일반적인 'read*'으로 옵션값을 주고 싶으면
find . -type f -name '$name*' -print
이 문장을 어떻게 수정해야 할까요?
search_dir.sh
#!/bin/bash
total=0
order='find . -type f -print'
order2='find . -type d -print'
while getopts ":i:e:f:d" opt;do
case $opt in
f)name=$OPTARG
order='find . -type f -name '$name' -print'
;;
d)name=$OPTARG
order='find . -type d -name '$name' -print'
;;
i)name=$3
name2=$5
order='find . -type f -name '$name' -print'
order2='find . -type d -name '$name2' -print'
;;
e)name=$3
name2=$5
order='find . -type f -name '$name' -print'
order='find . -type d -name '$name2' -print'
;;
\?)
order='find . -type f -print'
order2='find . -type d -print'
exit;;
esac
done
echo $order
if [ $# -lt 3 -a $# -gt 1 ]
then
echo "start 1 parameter"
for filename in $($order)
do
total=$((total+1))
done
echo $total
elif [ $# -eq 0 ]
then
echo "no argument"
for filename in $($order)
do
total=$((total+1))
done
echo "number of file"
echo $total
total=0
for filename in $($order2)
do
total=$((total+1))
done
echo "number of directory"
echo $total
else
echo "start 2 parameter"
for filename in $($order)
do
total=$((total+1))
done
echo "number of file"
echo $total
total=0
for filename in $($order2)
do
total=$((total+1))
done
echo "number of directory"
echo $total
fi
아 죄송합니다.
소스를 올리고 나니 가독성이 정말 떨어지게 되었네요
정말 죄송합니다.
이렇게 수정하면
이렇게 수정하면 어떨까요?
따옴표가 아니라
따옴표가 아니라 쌍따옴표군요...
* bash-3.2.33에서 테스트 했습니다.
음..
find . -type f -name '${name}*' -print 이렇게 해보았지만
역시 같은 폴더안에 read로 시작하는 모든 파일을 넣어버리네요
find . -type -f -name read1 read2 read3... 이렇게 넣어버립니다;
음..
* 을 \* 로 escaping 을 해주시면 될 것 같군요..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기