배쉬 쉘 프로그래밍 중 변수 다루는 법
글쓴이: cowpens / 작성시간: 일, 2015/10/18 - 8:54오후
하나의 실행 파일을 옵션을 바꿔가며 여러번 실행하는 쉘프로그램을 만드는데 마음대로 안 되네요.
실행파일 형식은
>repeat $1 $2
$1은 실행할 작업
$2는 옵션이 적힌 텍스트 파일
#!/bin/bash line_count=$(wc -l $2 | awk '{ print $1 }') #wc로 옵션파일의 줄 수를 구하고 awk로 줄 숫자만 뽑아냅니다 while [ $line_count -gt 0 ] #옵션 갯수만큼 반복 do STR=$(sed -n "$line_count"p $2) #sed로 마지막 옵션부터 한줄씩 뽑기 $1 #옵션 바꿔서 실행 line_count=$(($line_count - 1)) done exit 0
문제는
>repeat "echo $STR" IP_list
이렇게 실행하면 빈칸만 나옵니다
bash -x로 작업을 확인하면
....
+ line_count=3
+ '[' 3 -gt 0 ']'
++ sed -n 3p IP_list
+ STR=999.999.999.999
+ echo
+ line_count=2
+ '[' 2 -gt 0 ']'
++ sed -n 2p IP_list
+ STR=999.999.999.998
+ echo
.....
이런식으로 sed에선 STR에 문자를 집어 넣는데
echo $STR에서는 STR이 비어있네요
sed의 STR과 echo에서의 STR이 전혀 다른 변수인 것처럼 취급하는데 어디가 문제일까요?
Forums:
찾아보기만 했습니다.
저라면 이렇게 확인해 볼겁니다.
- ''와 ""
- () 와 $(()) $[]
- ; 세미콜론
- 이름을 바꿔서 실행
- 한줄씩 지워서 값을 확인
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-10.html
Arithmetic evaluation
$(())
$[]
Local variables
Reading user input with read
String comparison examples
http://newstars.tistory.com/127
http://jecu7.blog.me/150001336665
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
실행할때 repeat "echo $STR"
일단 실행할 때
repeat "echo $STR" IP_list
대신
repeat 'echo $STR' IP_list
do 루프 안에서
$1 대신 eval "$1"
로 해보세요.
감사합니다
제가 딱 원하던대로 돌아가네요
감사합니다
댓글 달기