10줄정도의 셸스크립트 질문입니다!

노력하는자의 이미지

먼저 스크립트는 다음과같습니다

#!/bin/bash
# symlinks.sh: 디렉토리에 들어 있는 심볼릭 링크를 나열하기.
 
ARGS=1                 # 명령어줄 인자가 한 개 있어야 됩니다.
OUTFILE=symlinks.list  # 저장할 파일
 
if [ $# -ne "$ARGS" ]  # 인자가 1개가 아니라면...
then
  directory=`pwd`      # 현재 작업 디렉토리
else
  directory=$1
fi
 
echo "\"$directory\" 디렉토리의 심볼릭 링크들"
 
for file in "$( find $directory -type l )"   # -type l = 심볼릭 링크
do
  echo "$file"
done | sort > "$OUTFILE"                     # 루프의 표준 출력이
#           ^^^^^^^^^^^^                       저장될 파일로 재지향 됩니다.
 
exit 0

현제디렉터리나 특정디렉터리의 심볼릭링크를 find명령으로 찾아서 symlinks.list 파일에 출력하는 스크립트인데요
여기서 2가지 질문이 있습니다!
먼저 파라미터가 전달됬는지 체크하는 if문을 다음과같이 대체할수도있다고 하더군요

directory=${1 - `pwd`}

${1 - `pwd` } 이게 무슨문법인지 모르겠습니다

마지막질문은 for문에 관한건데요
done마지막에 이런식으로 되어있습니다
done | sort > "$OUTFILE"
done다음에 sort명령이 이어지고있는데 이것도 처음보는문법이네요
어떤 문법인가요?

김정균의 이미지


directory=${1 - `pwd`}

이건 출처가 어떻게 되나요? 저도 처음 보고 bash 4.2 까지는 "bad substitution" 에러가 발생하는 데요.

두번째 질문은 https://mug896.gitbooks.io/shell-script/content/compound_commands.html 을 읽어 보시면 이해가 되실 겁니다. 간단히 설명하면, for 문으로 출력 되는 내용을 sort의 STDIN 으로 전달하는 것 입니다.

참고로, 두번째 질문에 링크해 드린, 조현호(mug896)님이 작성하신 Bash 쉘 스크립트 가이드(https://kldp.org/node/154415)를 참고 하시면 도움이 될 것 같습니다. 제가 본 bash 가이드 중에서 가장 좋은 문서라고 할 수는 없지만, 추천을 하기에는 가장 좋은 문서라고 생각 됩니다. (정리가 너무 깔금하게 잘 되었습니다. 저도 요즘에는 bash man page에서 이 문서로 갈아탔습니다. ^^;)

노력하는자의 이미지

일단 좋은답변과 좋은 레퍼런스 추천에 감사드립니다! 두번째 질문도 이해가 됬습니다

첫번째 질문에 제가 directory=${1 - `pwd`} 이렇게 띄어쓰기를 넣었는데 오타였습니다

directory=${1-`pwd`}

이게 원래 질문하려던 변수할당 표현이었습니다

그리고 출처는
http://www.tldp.org/LDP/abs/html/loops1.html
여기의 Example 11-11. Listing the symbolic links in a directory 예제 5번째 줄에서 가져왔습니다.

qiiiiiiiip의 이미지

첫번째 질문은

앞에 김정균님께서 말씀하신 레퍼런스 인
https://mug896.gitbooks.io/shell-script/content/exp_and_sub/parameter_expansion.html

에서 Use a default value 부분을 보면 됩니다.

노력하는자의 이미지

답변감사드립니다! 덕분에 이제 모두 이해했습니다!
셸 변수를 할당할때 디폴트값을 지정할수도있군요

댓글 달기

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