쉘 스크립트중...궁금한거요... 초보적인건데.. 모르겠내요...

khaic0c0의 이미지

쉘 스크립트 공부한지... 두시간 정도 되어갑니다. ^^;

책에... 20페이지 분량으로 되어있는데 이거 읽고도 감이 잘 안잡혀 여쭈어봅니다.

#!/bin/sh

key = 1

while $key = 10
do
  echo $key
  key++
done

먼저 이와같이 1부터 10까지 뿌려주고 싶은데.. while 문 밖에 안된다내요..
for 문은 1 2 3 이렇게 일일이 지정해줘야 되니... 반복문같지 않은 반복문이고.
그나마 제가 쉽게 해볼수 있는게 while 인듯 한대요...

그니까..제가 하고 싶은건요... key 값을 1로 초기화 하고...
key 값이 10일동안만 do~ done 안을 실행하고 싶은데요.

즉, 1값 뿌려주고 key 값 일 더하고.. 뭐 이런식으로해서 뿌려주고 싶은데..

첨 하는거라 그런지 C 처럼 만들어져버렸는데 실행이 안됩니다.

어떻게 하면될까요?

그리고 제가 심심해서 그러는데...그냥 해보고 싶은것은...
디렉토리를 얼마나 만들수 있는지 궁금한대...그래서 while 문으로
얼마까지 만들수 있나 만들어 보고 싶은데요...

#!/bin/sh

key = 1

while $key = 0
do
  echo `mkdir $keydirectory`
  key++
done

이렇게 하면 나중에 다운되고 나서... 컴 다시 키면...마지막 숫자가..
가장 나중에 만들어 진거 아닐까 하는데...

조언좀 해주시면 감사하겠습니다.

cdpark의 이미지

#!/bin/sh

key=1

while [ $key -le 10 ] ;
do
        echo $key
        key=`expr $key + 1`
done

원하시는 스크립트가 이거겠죠?

bash에서라면 expr 대신에 let을 써서 좀 더 간단히 쓸 수 있습니다.

#!/bin/bash

key=1

while [ $key -le 10 ] ;
do
        echo $key
        let key++
done

그리고 파일시스템에 무한히 디렉토리를 만들다가 다운(!)되면 파일시스템이 망가질 수 있습니다. 복구가 불가능할 수도 있으니 미리 마음의 각오를 단단히...

terminus의 이미지

for i in `seq 10`; do
    echo $i
done

이렇게 해 보시고요, 변수를 계산하는 방법은 여러가지가 있는데, 다음 구구단 프로그램을 잘 살펴보세요. :)

#!/bin/bash
for i in `seq 2 9`; do # 2단에서 9단까지
    for j in `seq 1 9`; do
        # 밑의 네 개 모두 동일한 결과를 가져옵니다.
        # 아무거나 주석을 풀고 실행시키세요.
        #let val=$i*$j
        #let "val = $i * $j"
        #val=$(($i*$j))
        #val=`expr $i \* $j`
        echo "$i x $j = $val"
    done
done

http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/loops1.html을 보시면 더 자세한 문법과 예제가 있습니다.

껍질의 파괴

khaic0c0의 이미지

먼저 답변 달아주셔서 감사합니다.

위와 같이 사용하니까.. for 문 답내요.. :-0

#!/bin/sh

key=1

until [ $key -le 0 ]
do
  echo `mkdir $key D`
  key=`expr $key + 1`
done

이와같이 하니까 비스무리 하게 되긴 하내요..

그런데... 1Directory, 2Directory,~~ 이런식으로 해주고 싶은데...

echo `mkdir $key Directory`

이부분을 어떻게 하면 좋은가요?

어딜 가든 필요한 인간되자~~ :-)

xfmulder의 이미지

echo `mkdir ${key}Directory`

내 자식들도 나처럼 !!

xfmulder의 이미지

terminus wrote:
[code]
#!/bin/bash
for i in `seq 2 9`; do # 2단에서 9단까지
    for j in `seq 1 9`; do
        # 밑의 네 개 모두 동일한 결과를 가져옵니다.
        # 아무거나 주석을 풀고 실행시키세요.
        #let val=$i*$j
        #let "val = $i * $j"
        #val=$(($i*$j))
        #val=`expr $i \* $j`
        echo "$i x $j = $val"
    done
done
[/code]
 
</blockquote></div>
 
 echo "$i x $j = $val" 대신에 printf "%d x %d = %2d \n" $i $j $val 써도 됩니다. (정렬)
 
또, 기본쉘 (/bin/sh) 를 쓰려면 맨 마지막것만 가능.  val=`expr $i \* $j`

내 자식들도 나처럼 !!

raymundo의 이미지

khaic0c0 wrote:

for 문은 1 2 3 이렇게 일일이 지정해줘야 되니... 반복문같지 않은 반복문이고.

현재 버전의 bash 는 다음과 같은 for 루프도 가능합니다.

for (( i=1; i<=10; i++ ))
do
    echo $i
done

반복문 같은 반복문이죠? :-) 다만 유닉스 플랫폼에 주로 설치되어 있는 bash 에서도 사용가능한지 잘 모르겠네요. 호환성에 주의를 해야겠죠.

좋은 하루 되세요!

댓글 달기

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