시스템관리자의 쉼터 커피닉스 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

가입없이 누구나 글을 쓸 수 있습니다. 공지사항에 대한 댓글까지도..




BBS >> 설치, 운영 Q&A | 네트웍, 보안 Q&A | 일반 Q&A || 정보마당 | AWS || 자유게시판 | 구인구직 || 공지사항 | 의견제시
쉘 스크립트 질문

 
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> 시스템 설치 및 운영
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
어드민
손님





올리기올려짐: 2007.4.20 금, 10:19 pm    주제: 쉘 스크립트 질문 인용과 함께 답변 글 편집/삭제

안녕하세요. 쉘 스크립트 관련 질문 입니다.

내용을 설명 드리면 디렉토리에 파일명이 daily_070101, daily_070102,
daily_070103 ~ daily_070229..................

이런 식으로 날짜별로 파일이 나누어져 있습니다.

저는 이 파일들 중에 16일부터 ~ 다음달 15일까지(daily_070116 ~
daily_070215) 파일을 리스팅 하여

파일 내용을 모두 합쳐서 하나의 파일로 만들고 싶습니다.

파일1.
1
2
3
파일2.
4
5
6

결과파일
1
2
3
4
5
6

아무리 생각을 해봐도 원하는 날짜를 어떻게 리스팅 해야하며

어떻게 합쳐야 하는지 잘 모르겠습니다.

조언 부탁 드립니다.

감사합니다.
위로
truefeel
카페 관리자


가입: 2003년 7월 24일
올린 글: 1277
위치: 대한민국

올리기올려짐: 2007.4.22 일, 1:00 am    주제: Re: 쉘 스크립트 (특정 기간의 파일만 리스팅) 인용과 함께 답변

코드:

LIST=`ls daily_*`
for f in $LIST
do
        if [ "$f" \> "daily_070115" -a "$f" \< "daily_070216" ]; then
           echo $f
        fi
done


if문의 문자열 비교로도 가능합니다. 문자열 비교는 >= 나 <= 가 없습니다.
따라서 날짜를 하나더 작거나 크게 표시해야 합니다.
echo 대신에 cat을 이용하면 하나의 파일로 만들 수 있겠죠.

테스트는 안해본 스크립트입니다.
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
어드민
손님





올리기올려짐: 2007.4.25 수, 5:19 pm    주제: 쉘 스크립트 인용과 함께 답변 글 편집/삭제

스크립트를 테스트해 보니

원하는 결과가 나오지 않습니다.

if문에서 비교가 되지 않고 디렉토리내 모든 파일이 리스트 되는데

if문 문자열 비교가 되나요?

= 은 되는거 같은데 >, < 는 안되네요..

답변 감사합니다.
위로
truefeel
카페 관리자


가입: 2003년 7월 24일
올린 글: 1277
위치: 대한민국

올리기올려짐: 2007.4.25 수, 6:28 pm    주제: Re: 쉘 스크립트 (if문의 문자열 비교) 인용과 함께 답변

어드민 씀:
스크립트를 테스트해 보니

원하는 결과가 나오지 않습니다.

if문에서 비교가 되지 않고 디렉토리내 모든 파일이 리스트 되는데

if문 문자열 비교가 되나요?

= 은 되는거 같은데 >, < 는 안되네요..

답변 감사합니다.


if문에서 문자열 비교됩니다.

> 나 < 앞에는 \ 를 넣으셨죠? 실행할 때 sh -x '파일명'으로 하면 간단한 디버깅이 가능합니다.

- 테스트한 과정들을 말씀해주시기 바랍니다.
- 그리고 해결되었다면, 어떻게 하니 결과를 얻었다라는 글을 올려주시면 다른 분에게 도움이 됩니다.

잘 안되면 테스트한 스크립트 올려주세요.
그럼 좋은 결과가 있으시길...
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
어드민
손님





올리기올려짐: 2007.4.26 목, 10:03 am    주제: 쉘스크립트 인용과 함께 답변 글 편집/삭제

#!/bin/sh

LIST=`ls bk_*`

for f in $LIST
do
if [ "$f" \> "bk_070315" -a "$f" \< "bk_070416" ]; then
echo $f
fi
done

테스트 코드 입니다.

7번째 라인에서

./billing_merge.sh[7]: <: unknown test operator
./billing_merge.sh[7]: <: unknown test operator
./billing_merge.sh[7]: <: unknown test operator

이런 에러가 나네요...ㅜ.ㅜ

테스트 환경은 AIX/ksh 입니다.
위로
truefeel
카페 관리자


가입: 2003년 7월 24일
올린 글: 1277
위치: 대한민국

올리기올려짐: 2007.4.26 목, 12:38 pm    주제: Re: 쉘스크립트 인용과 함께 답변

어드민 씀:
#!/bin/sh

LIST=`ls bk_*`

for f in $LIST
do
if [ "$f" \> "bk_070315" -a "$f" \< "bk_070416" ]; then
echo $f
fi
done

테스트 코드 입니다.

7번째 라인에서

./billing_merge.sh[7]: <: unknown test operator
./billing_merge.sh[7]: <: unknown test operator
./billing_merge.sh[7]: <: unknown test operator

이런 에러가 나네요...ㅜ.ㅜ

테스트 환경은 AIX/ksh 입니다.


bash 와 GNU coreutils 기준으로 말씀드렸는데, ksh에 built-in된 test command에서는 < 나 > 가 안되니 에러가 발생하는 것 같네요.

1. ftp://alpha.gnu.org/gnu/coreutils/ 에서 coreutils을 받아서 컴파일 한후 test 와 [ 파일만 별도로 복사한 후 테스트를 해보시거나,
2. 아니면 if문의 문자열 비교 대신에 sed로 문자열을 걷어낸 후에 숫자만을 비교해볼 수도 있습니다.

NUM=`echo "bk_070315"|sed s/bk_//g`

이렇게 숫자만 빼낸 후, if에서 -lt, -gt 등으로 체크할 수도 있구요.
if문 만들 수 있으시겠죠?
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
글 쓰기   답변 달기    커피닉스, 시스템 엔지니어의 쉼터 게시판 인덱스 -> 시스템 설치 및 운영 시간대: GMT + 9 시간(한국)
페이지 1 중 1

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 있습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB © 2001, 2005 phpBB Group