[완료]쉘 스크립트 초보 'basename $0'이 안 먹힙니다.

SilverWhalle의 이미지

#!/bin/sh
#
#check_flag: 인자를 검사하여 flag를 켠다.
#

aflag=0
bflag=0

for arg
do
case $arg in
-a) aflag=1;;
-b) bflag=1;;
*) echo "Usage: 'basename $0' [-a][-b]" 1>$2
exit 1;;
esac
done

echo aflag=$aflag bflag=$bflag

위 내용의 쉘 스크립트입니다.
인자가 -a이거나 -b 이면 각 변수에 1값을 줍니다.
하지만 case문의 패턴과 일치하지 않는 argument라면
'*)'패턴의 명령문이 실행된다고 설명되어 있습니다.
하지만 Usage문장이 나타나지 않습니다.

이 예제외에도 그전부터 이상하게 basename만 들어가면 에러구문이
뜬다거나 실행은 되더라도 basename쪽 구문은 빼고 실행되는
현상을 보입니다. 그냥 무시하고 강좌 읽어나가다보면 이유를 알게
되겠지라고 생각했으나 그런문제가 아닌듯해 보입니다.

현재 사용 리눅스는 우분투 엣지 입니다.

rkdskd의 이미지

' 과 ` 의 차이가 아닐까 생각해봅니다.

SilverWhalle의 이미지

작은 따옴표가 아니었군요. 감사합니다.
하지만 그걸로는 부족한것 같습니다. '가 아닌 `로 고쳤는데도 마찬가지네요.
그리고 ...
prog= basename $0
if [ $# -eq 3 ]
then
echo "Script $prog path: $0"
echo "Arg1: $1"
echo "Arg2: $2"
shift
echo "Arg3: $2"
else
echo "Usage: $ $prog arg1 arg2 arg3"
exit
fi

위 스크립트에서 prog변수에 프로그램 이름을 넣는 basename $0이
쓰였는데도 밑에 then구문의 echo "Script $prog path: $0"에서
$prog는 쏙 빼놓고 출력이 됩니다.
이 예제에선 애초에 `기호가 없는데 말이죠. ` 기호 문제 말고도
뭔가가 있는듯 합니다. basename이 안 먹히는 뭔가가...

익명 사용자의 이미지

prog=`basename $0`

SilverWhalle의 이미지

감사합니다.
basename에는 무조건 `을 붙여야 하는군요.
그런데 `을 붙여도 안 먹히더라구요.
유심히 살펴보다 알게 되었습니다.
'=' 뒤에 공백이 없어야 되는군요.
왜 이런 기본에 대한 언급이 없는건지..
make강좌는 공백이 없어야 된다든지, 탭키가
한번은 반드시 들어가야 한다는 등의 언급이
분명히 있는데 강좌를 올려준건 고맙지만 정말
이런 기본적인 언급도 없을땐 화가 나기도...

ktd2004의 이미지

가장 기본적인 생각을 해보시면 됩니다.
쉘 스크립트의 경우에는

a = b c = d

위와 같이 공백이 들어가 있으면 각각이 하나의 파라메터로 보게 되죠..

따라서

a = `basename $0`

은 쉘 스크립트의 대입으로 보지 않고

a라는 명령의 첫번째 파라메터로 "="를,
두번째 파라메터로 `basename $0`의 결과를 입력하는 것으로 인식하게 됩니다.

bff38auxo의 이미지

http://tldp.org/LDP/abs/html/

이번에 작업하면서 본 howto인데, 도움을 많이 받았습니다.
기본적인 것들도 자세하게 잘 나와있고, 예제도 풍부하구요. 대신 양이 좀 많습니다.
필요한 부분만 취해서 보시면 될듯.

아래 링크는 번역본인데...좀 오래되었군요;)

http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/index.html

댓글 달기

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