다시 질문올려요 쉘 스크립트 입니다.

slimsmile의 이미지

제가 짠 코드도 올리지 않고 성의없게 질문올렸던점 정말 죄송합니다.
막히는 부분을 상세하게 쓸게요 ^^;

프로그램에 대한 문제입니다.
디렉토리의 내용중 디렉토리 개수, 파일의 개수를 출력하기 위한 스크립트를 작성한다.

- 옵션이 주어지지 않을 경우, 현재 디렉토리만을 대상으로 파일 개수, 디렉토리 개수를 출력한다.

- 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

slimsmile의 이미지


소스를 올리고 나니 가독성이 정말 떨어지게 되었네요
정말 죄송합니다.

ktd2004의 이미지

이렇게 수정하면 어떨까요?

find . -type f -name '${name}*' -print 
ktd2004의 이미지

따옴표가 아니라 쌍따옴표군요...
* bash-3.2.33에서 테스트 했습니다.

#!/bin/sh
 
name="read"
 
order=`find . -type f -name "${name}*" -print`
 
echo $order
slimsmile의 이미지

find . -type f -name '${name}*' -print 이렇게 해보았지만
역시 같은 폴더안에 read로 시작하는 모든 파일을 넣어버리네요
find . -type -f -name read1 read2 read3... 이렇게 넣어버립니다;

ymir의 이미지

* 을 \* 로 escaping 을 해주시면 될 것 같군요..

find . -type f -name ${name}\* -print

되면 한다! / 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 』

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.