[완료] shell script 질문 입니다..

hyper9의 이미지
6530
points
0
points

예를 들어 hda: 1000 MB 라는 출력문 중에서
size라는 변수에 1000만을 가져다 대입시켜 놓으려면
어떻게 해야하는 걸까요?

기초적인 걸 잘 몰라서 죄송하지만 질문 드립니다.

hyper9의 이미지
6530
points

awk를 쓰지 않고 할 수 있는 방법이면 좋겠습니다..

0
points

다시 부탁드릴게요 ^^

kz의 이미지
10604
points

형태가 고정되어 있다면

0
points

$ cat > t.sh
#!/bin/sh
echo $2
$ echo hda: 1000 MB | xargs sh t.sh
1000

음..

1
point

echo "hda: 1000 MB" | cut -d' ' -f2

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

sephiron의 이미지
3285
points

위키에 아주 좋은 배쉬 스크립팅 매뉴얼이 번역되어 있습니다.

0
points

#!/bin/sh
A="hda: 1000MB"
B=${A:5}
echo $B

vamf12의 이미지
1739
points

글쎄요 저라면

0
points

글쎄요 저라면 다잘라 버리겠습니다. SIZE라는 것은 어짜피 숫자일테니까요

B=`echo "hda: 1000MB" |tr -d "A-z: "`

hyper9의 이미지
6530
points

감사합니다.

0
points

덕분에 다양한 정보를 얻을 수 있었네요 ^^

한 가지 더 추가로 질문하고 싶은 것이 있는데요.

if test -b /dev/hda ; then
[ do something ]
fi

와 같은 문장에서 첫번째 줄의 의미가 정확히 어떤 건지를
잘 모르겠더라고요..

도움 부탁드려도 될까요? ^^

음..

1
point

http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/index.html 가볍게 한번 읽어 보시는게 빠르겠군요..

-b 에 대한 설명은
http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/fto.html

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

hyper9의 이미지
6530
points

감사합니다..

0
points

좋은 자료를 알려주셨네요...

물론 위의 질문에 대한 답을 주시는 것도 환영입니다.
지금 부터 알려주신 자료를 읽어보려고 합니다..~ ^^

hyper9의 이미지
6530
points

감사합니다..

0
points

결국은 위에서 하려고 했던 일은 성공적으로 마쳤답니다.

하지만,,또 새로운 곳에서 막혀있습니다 ㅜㅜ
간단히 말씀을 드리면,,

size1=1024
size2=1024

fdisk /dev/hda 2>/dev/null 1>/dev/null << EOF
n
p
1

+1024M --> ?
n
p
2
+1024M --> ?

a
1
w
EOF

원래는 위와 같이 상수를 직접 입력해서 Shell Script상에서 fdisk를 이용한
partition작업을 하는 것인데요 ...

위에 있는 size1, size2 변수값을 이용해서 fdisk 안에 있는 상수값을 대체할
수 있는 방법이 있는지를 찾고 있습니다.

몇가지 해보는 중인데,,잘 안되네요.
조언 부탁드립니다.

vamf12의 이미지
1739
points

그냥 변수

0
points

그냥 변수 치환으로는 불가능 하던가요? 아님 변수 치환에 익숙 하지 않으신건가요...

위의 것도 두가지정도의 방법으로 해결 가능합니다. Here Document도 내부에 치환 가능하면 치환을 합니다.
문제는 +$size1M 이렇게 표기할경우 size1M변수를 치환하려고 들어서 문제 겠지요. 그렇다고 +"$size1"M이렇게 표기하면, Here Document내부에서는 ""(인용부호)까지 포함되어서 문제가 되고... 두가지정도 해결 방법이 있습니다.

1) 입력용 변수를 새로 맹글면 되지요...

input_size1=+"$size1"M

변수 대입에서는 인용부가 기본적으로 사라집니다. (\"처럼 명시적으로 사용하지 않는한 무시됩니다.)

2) 본쉘에서는 않되지만, 변수 확장시 사용할 변수명을 명시 할수 있습니다. KSH이상

${변수명}

fdisk /dev/hda 2>/dev/null 1>/dev/null << EOF
n
p
1

+${size1}M
...

hyper9의 이미지
6530
points

감사합니다..

0
points

지금 사용하고 있는 Shell이 bash이므로 2)번의 방법은 안되는거겠죠?

첫번째 방법을 사용해보려고 합니다.
위에서 설명해 주신 것처럼 새로운 변수를 만들어서 사용하려 하는데요.
새로운 변수를 만든 후에, fdisk안에 사용된 "+1024M" 자리에
"$새로운변수" 이렇게 넣으면 되는 거겠죠?

혹시 제가 잘 못 이해했다면, 다시 지적해주세요.
설명 감사합니다. ~

vamf12의 이미지
1739
points

배쉬는 두가지 모두

0
points

배쉬는 두가지 모두 됩니다.
본쉘 -> sh
배쉬 -> bash == 본쉘어게인

실제로 지원하는 기능은 sh << ksh << bash 입니다.

hyper9의 이미지
6530
points

또 질문이 생겼습니다.

0
points

shell을 보다 보니까,,계속 질문이 생기네요..
이걸 이렇게 한 thread에 계속 질문을 해야하는지 좀
헷갈리기도 하지만,,,이번까지는 이렇게 질문을 드리려고 합니다..

다름이 아니고요 ~
10.20.16.60
10.20.16.61
10.20.16.62
10.20.16.63
10.20.16.64
10.20.16.65
라는 내용을 가진 file이 있습니다..IP address list입니다..

이 file을 한줄씩 읽어내서..화면에 표시해 주는 script를 다음과 같이 만들었습니다.
while read line
do
echo "$line"
done < test

잘 동작하는 것을 확인했는데요,,,

여기서 더 해보고 싶은것은,,
file안에 line들을 차례로 display하고 나면,,
다시 첫 line으로 돌아가,,다시 출력을 시작하도록 만들고
또 그것이 끝나면,,다시 첨부터 돌아가서 line을 출력하도록
만드는 것을 해보고 싶어서요..

아직 그건 해결을 못하고 있습니다.
조언 부탁드릴게요 ^^

vamf12의 이미지
1739
points

엥... -_-? 무한

0
points

엥... -_-? 무한 반복입니까? 의도하시는 바를 명확하게 이해하질 못하겠습니다. OTL

hyper9의 이미지
6530
points

무한 반복은 아니고요 ..

0
points

예를 들면 1시간동안 계속 반복시키고 싶습니다.~
하긴 1시간을 재는 방법도 좀 생각을 해야겠네요..

현재 계획은 1시간동안 반복해서 display하는 것입니다.
그럼 조언 부탁드릴게요 ^^

vamf12의 이미지
1739
points

여전히 의도 하시는

0
points

여전히 의도 하시는 바를 모르겠습니다. ㅠ_ㅠ

완전 OTL수준...

뭐 여하튼 1시간 동안 test라는 파일을 계속 반복해서 출력하고 싶다면?

dst_time=`date +%s`
dst_time=`expr $dst_time + 3600`
while [ $dst_time -ge `date +%s` ]
do
    while read line
    do
        echo "$line"
    done < test
done

while 문에 입력을 리다이렉션을 할경우 while문 종료시 입력이 닫힙니다. 따라서 다시 while문을 실행해주면 입력 재지정이 다시 처음부터 되는 효과가 있습니다.

hyper9의 이미지
6530
points

감사합니다..

0
points

항상 Shell Programming은 ,,자신이 없는 분야인데..
이번에 많은 조언을 받았네요,,

공부를 좀 열심히 해야겠다는 생각도 들고요
다시 감사드립니다..^^

댓글 보기 옵션

원하시는 댓글 전시 방법을 선택한 다음 "설정 저장"을 누르셔서 적용하십시오.