쉘스크립트 질문좀 드리겠습니다.

amblance의 이미지

안녕하세요.
쉘스크립트를 코딩하다가 질문이 있어서 이렇게 글을 올립니다.

일단 코드는 다음과 같습니다.
while getopts "a:m:g:" OPTION
do
case $OPTION in
a)
ftp -n -i $OPTARG << End-Of-Session <------
user $Username $Password
binary
mget *
bye
End-Of-Session <-------
exit 0
;;
...
esac
done

이런식으로 ftp를 이용해서 파일을 받아오는 스크립트를 작성하려고 합니다.
그런데 화살표로 표시된 부분이 실행이 안되고 있습니다.
케이스문 바깥에 있을때는 실행이 되지만, 케이스문 안에 있을때는 실행이 되지가 않습니다.
``를 써도 결과는 마찬가지더군요... 가르침좀 주시면 감사하겠습니다.

한가지 더 여쭤보겠습니다.
-a는 전체파일 복사 -m은 특정한 파일 확장자 복사 -g는 단일 파일 복사로 구현하려 합니다.
나머지부분은 다 똑같고 mget * 이부분만 달라질것 같은데 어떻게 함수를 사용해야 하나요?
감사합니다.

ymir의 이미지

화살표도 스크립트에 포함되어 있는 건 아니겠지요?
해당 스크립트는 별다른 문제 없이 정상적으로 동작합니다.
sh 에 -x 옵션을 주어서 디버깅을 해보심이 좋을 것 같네요.

테스트 한 스크립트입니다.

#!/bin/sh
 
user=myname
passwd=mypass
 
while getopts "a:m:g:" OPTION
do
    case $OPTION in
    a)
        ftp -n -i $OPTARG << End-Of-Session
user $user $passwd
binary
mget *.gz
bye
End-Of-Session
        ;;
    m)
        ;;
    g)
        ;;
    esac
done
 
exit 0;

옵션에 따라 내용이 달라져야 한다면, while 문에서는 파일명 또는 주소값을 parsing 하고..
while 문 끝난 후에 ftp 를 수행하면 될 것 같네요.

#!/bin/sh
 
user=myname
passwd=mypass
 
while getopts "a:m:g:" OPTION
do
        case $OPTION in
        a)
                file=\*
                ipaddr=$OPTARG;
                ;;
        m)
                file=\*\.tar\.gz
                ipaddr=$OPTARG;
                ;;
        g)
                file=test.dat
                ipaddr=$OPTARG;
                ;;
esac
 
done
 
ftp -n -i $ipaddr << End-Of-Session
user $user $passwd
binary
mget $file
bye
End-Of-Session
 
exit 0;

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

amblance의 이미지

정말 좋은 말씀감사합니다.
화살표는 스크립트에 포함되어있지 않습니다. :)

한가지 더 질문좀 드릴께요. 위스크립트에서 ipaddr로 인자를 하나 주었는데요,
디렉토리까지 인자를 주려면 아래처럼 해주면 되나요?

a)
Directory=$OPTARG
file=\*
ipaddr=$OPTARG
;;

B(Birth) C(Choice) D(Death)
인생은 주어지는 것이 아니고 선택하는 대로 되는 것이다.

B(Birth) C(Choice) D(Death)
인생은 주어지는 것이 아니고 선택하는 대로 되는 것이다.

ymir의 이미지

아시다시피 getopt 에서 "a:m:g:" 라고 주어진 것은...
-a, -m, -g 옵션에 반드시 하나의 argument 가 와야 한다는 뜻입니다.
getopt 에서 옵션을 parsing 한 경우에는 OPTARG 에 그 하나의 arguement 가 저장되는데..
위 내용은 a, m, g 세 개의 옵션이 모두 ip_address 를 arguemtn 로 받음을 뜻합니다.

만약 directory 를 추가로 받으시려면..
새로 옵션을 추가해서, directory 변수에 OPTARG 를 저장하셔야 합니다.

이 경우라면..

.....
 
while getopts "a:m:g:d:" OPTION
do
        case $OPTION in
           .....
        d)
                dir=$OPTARG;
                ;;
esac
 
done
 
.......

와 같은 식으로 추가하시면 될 것 같고, 아래와 같이 실행하시면 되겠네요.

$ ./script.sh -d dirname -a ip_addr

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

amblance의 이미지

정말 큰 도움 되었습니다.
감사합니다.

B(Birth) C(Choice) D(Death)
인생은 주어지는 것이 아니고 선택하는 대로 되는 것이다.

B(Birth) C(Choice) D(Death)
인생은 주어지는 것이 아니고 선택하는 대로 되는 것이다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.