달력

1

« 2025/1 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31


jar 파일이 변경-버전업, 또는 이름 변경-될 때마다 eclipse에서 library 정보도 변경해줘야 되고,
개발자들에게 배포된 것도 확인해줘야 되고, 등등등. 이래저래 구찮은 일이 많아서.
그냥 jar 파일명에서 버전을 뺀 상태에서 버전관리만 하려고 찾다보니.
Manifest.MF 파일에 있는 버전 정보를 읽으면 되겠다 싶어서 만든 샘플.


checkVersion.java

import java.util.*;

public class checkVersion {
        JarFile jarFile;
        Manifest manifest;
        Attributes attributes;
        String jarFileName;
        String version;

        public checkVersion(String filename) {
                jarFileName = filename;
        }

        public void printVersion() {
                try {
                        // jar 파일을 읽습니다.
                        jarFile = new JarFile(new File(jarFileName));
                        // jar 파일에서 manifest 정보를 가져옵니다.
                        manifest = jarFile.getManifest();
                        // manifest에서 main 정보를 가져옵니다.
                        attributes = (Attributes)manifest.getMainAttributes();

                        // attribute 중에서 Implementation-Version 정보를 추출한다.
                        version = attributes.getValue("Implementation-Version");
                        System.out.println("@@ " + version);

                        /* 아래처럼 하면 manifest의 main 정보 전체를 확인할 수 있다.
                        for (Iterator it=attributes.keySet().iterator(); it.hasNext(); ) {
                                Attributes.Name attrName = (Attributes.Name)it.next();
                                String attrValue = attributes.getValue(attrName);

                                System.out.println("## " + attrName + " : " + attrValue);
                        }
                        */
                } catch(Exception e) {
                        e.printStackTrace();
                }
        }

        public static void main(String[] args) {
                if( args.length != 1 ) {
                        System.out.println("Usage : ");
                        System.out.println("    java printVersion [jar_file_name]");
                        return;
                }

                /*
                if( !(new File(args[0])).exists() ) {
                        System.out.println("Error : ");
                        System.out.println("[" + args[0] + "] file does not exist.");
                        return;
                }
                */

                checkVersion cv = new checkVersion(args[0]);
                cv.printVersion();
        }
}



 MANIFEST.MF


Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Niall Pemberton
Build-Jdk: 1.5.0_07
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-ManifestVersion: 2
Bundle-Name: Apache Commons IO Bundle
Bundle-SymbolicName: org.apache.commons.io
Bundle-Vendor: The Apache Software Foundation
Bundle-Version: 1.4
Export-Package: org.apache.commons.io;version=1.4,
 org.apache.commons.io.comparator;version=1.4,
 org.apache.commons.io.filefilter;version=1.4,
 org.apache.commons.io.input;version=1.4,
 org.apache.commons.io.output;version=1.4
Implementation-Title: Commons IO
Implementation-Vendor: The Apache Software Foundation
Implementation-Vendor-Id: org.apache
Implementation-Version: 1.4
Import-Package: org.apache.commons.io;version=1.4,
 org.apache.commons.io.comparator;version=1.4,
 org.apache.commons.io.filefilter;version=1.4,
 org.apache.commons.io.input;version=1.4,
 org.apache.commons.io.output;version=1.4
Specification-Title: Commons IO
Specification-Vendor: The Apache Software Foundation
Specification-Version: 1.4
X-Compile-Source-JDK: 1.3
X-Compile-Target-JDK: 1.3 


실행결과

weblogic@WAS01[/export/home/weblogic]# java checkVersion commons-net-1.4.1.jar
@@ 1.4.1


 

'그거 > Java' 카테고리의 다른 글

XML 특수 문자 파싱 오류 확인  (0) 2010.01.29
[Java] Inner Class에 이런 것이 있었군요...  (0) 2009.09.29
JMeter 사용하기...  (2) 2009.08.20
JCONSOLE 사용하기.  (0) 2009.07.28
[ShutdownHook] 오랜만의 Java 포스팅..  (0) 2009.07.18
:
Posted by 뽀기
2009. 9. 14. 17:09

원어데이 행사합니다~~ 생활/정보2009. 9. 14. 17:09


RSS 등록해놓고 하루에 한 번씩 꼭 가보는 사이트중에 하나인

원어데이...

하루에 한가지 물품만 판매하는 사이트입니다..

때론 폭발적인 반향을 일으키기도 하고, 때론 담당 MD가 엄청 욕을 먹기도 하죠.

암튼, 여기서 적립금 행사를 합니다.

09/14 ~ 09/21 7일동안 구매금액의 50%를 적립금으로 준다네요~(배송비는 빼고 인듯 합니다.)

여기(http://www.oneaday.co.kr)로 가보세요~


:
Posted by 뽀기

오랜만에 C로 프로그램 테스트 중인뎁.. 컴파일 열라 안된다. ㅜㅜ


[CISD-INTCH01 284] src2 > make
gcc -m64 -O -I. -I../jms/c_api -shared -fPIC  eaiClientSample_unix.c -o eaiClientSample_unix.o
gcc -m64 -O -I. -I../jms/c_api -shared -fPIC  EAIJMSClient4Unix.c -o EAIJMSClient4Unix.o
gcc -m64 -O -I. -I../jms/c_api -shared -fPIC  EAIMessage.c -o EAIMessage.o
gcc -m64 -O -I. -I../jms/c_api -shared -fPIC  EAIJMS_Util.c -o EAIJMS_Util.o
gcc -O -fPIC -m64 -L../jms/c_api/lib -lstc_msapi -lstc_mscommon -lstc_msclient -lstc_mscapi -lnsl -lsocket  eaiClientSample_unix.o EAIJMSClient4Unix.o EAIMess
age.o EAIJMS_Util.o -o eaiJmsClient4SunOs
정의되지 않음                   첫번째 참조된
 기호                       파일:
__1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mh_r1_ ../jms/c_api/lib/libstc_mscommon.so
__1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mi_r1_ ../jms/c_api/lib/libstc_mscommon.so
__1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Md_r1_ ../jms/c_api/lib/libstc_mscommon.so
__1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mf_r1_ ../jms/c_api/lib/libstc_mscommon.so
__1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mb_r1_ ../jms/c_api/lib/libstc_mscommon.so

실행하면 위와 같이 에러가 나는데 당췌 뭔소린지...
보아하니 library가 잘못 링크 됐거나, 덜 링크 된것 같은데..

아래와 같은 방법으로 찾으면 된단다.

[CISD-INTCH01 286] src2 > nm -A /usr/lib/lib* | grep "__1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mh_r1_"
nm: /usr/lib/lib.b: File format not recognized
/usr/lib/libCstd.so.1:00091768 T __1cDstdNbasic_ostream4Ccn0ALchar_traits4Cc___2l6Mh_r1_
nm: /usr/lib/libcctagent.so: 사용 권한이 거부됨
.....

:
Posted by 뽀기

# 전제 사항
$DOMAIN_HOME=/WLS_Domain/CISCD1
$MANAGED_SERVER_NAME=CISCD1
$ADMIN_SERVER_PORT=7001
$USERNAME=weblogic
$PASSWORD=weblogic


1. WebLogic Admin Console에 접속한 후 왼쪽 위의 "Change Center"의 메뉴중에  "Lock & Edit"을 클릭합니다.


2. 왼쪽 메뉴에서 "Server"를 클릭합니다.


3. "New" 를 클릭하여 Server를 추가합니다.


4. "Server Name", "Server Listen Port"를 입력하고, "Next"를 클릭합니다.


5. 입력한 값을 확인하고 "Finish" 를 클릭하여 Server를 생성합니다.


6. 왼쪽 위의 "Change Center"에서 "Activate Changes"를 클릭하여 변경한 내용을 적용합니다.


7. "Server"를 클릭하면 방금 추가한 Server를 확인할 수 있습니다.


8. 이제 방금 추가한 Managed Server의 start/stop script를 작성합니다.


9. start.sh, startall.sh stop.sh stopall.sh 를 각각 작성합니다.


10. Admin Server에 접속할 때 사용하기 위한 계정정보를 저장한 boot.properties 파일을 생성합니다.
     $ vi boot.properties
     username=weblogic
     password=weblogic



11. startall.sh 를 실행하여 Managed Server를 실행하면 $DOMAIN_HOME/servers 밑에 방금 추가한 Server명의 디렉토리가 생성됩니다.


12. Admin Console에서 Server의 상태를 확인합니다.
:
Posted by 뽀기
2009. 8. 20. 17:43

JMeter 사용하기... 그거/Java2009. 8. 20. 17:43


JMeter라고 하는 아주 괜찮은 툴이 있습니다.
사용법을 잘 아는것은 아니지만, 그래도 가끔 HTTP 테스트용으로 유용하기에 사용법을 간단하게 정리해둡니다.

# 전제 조건
1. http://localhost:7001/fmsclient/request.jsp 파일이 존재합니다.
2. request.jsp는 userId, name, age, addr을 parameter로 받아서 출력합니다.

# 작업 순서
1. JMeter 홈페이지에가서 JMeter를 다운로드 받습니다.
   http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi

2. 압축을 풀면 아래 그림과 같은 파일/폴더들이 나타납니다.



3. bin 폴더에 보면, "jmeter.bat" 를 실행하면 아래 그림과 같이 JMeter 창이 나타납니다.
    "Test Plan" 이라고 나옵니다. 여기에 JMeter에서 실행될 각 Test들에 대한 전체적인 세팅을 합니다.
   체크박스 두개가 있는데,
   Run Thread 어쩌구 하는 체크박스는 Test Plan에 생성된 Thread Group(뒤에 설명하겠지만 실제 작업 단위이다.)을
   동시에 실행할 건지, 한 번에 하나씩 실행할 건지 여부를 나타내고,
   Functional Test 어쩌고 한거는 실행 결과를 파일로 저장할지 여부를 나타냅니다.



4. 이제 실제 작업 단위인 Thread Group을 추가합니다.
   아래그림처럼, Test Plan을 선택하고 마우스 오른쪽 버튼을 클릭해서 Add > Thread Group을 선택합니다.


5. Thread Group을 추가하면 아래 그림과 같이 나타나는데, 각 항목을 적절하게 설정합니다.
    이름을 지정하고, 중간에는 에러나면 어떻게 할 건지를 나타내는 부분이 잇고,
    그 아래 부분에 실제 작업을 수행하는 Thread의 개수와 시간들에 대해서 설정하도록 되어 있습니다.
    Number of Threads(users) 는 실행할 Thread의 수, 즉, 몇명의 사용자가 동시에 호출을 하는지 여부를 나타냅니다.
    Ramp-Up Period(in seconds)는 전체 쓰레드가 전부 실행되는데까지 걸리는 시간을 나타냅니다.
    예를 들어, Number of Thread가 5개이고, Ramp-Up Period가 15초 일 경우에,
    첫번째 thread가 수행된 후 다음 thread가 수행될때까지 3초를 대기한단 얘기.
    즉, 전체 5개 Thread가 15초동안 실행이 되려면, 3초마다 하나씩 실행이 되어야 된다는 겁니다.
    Loop Count는 각 Thread가 몇번씩 실행을 할 것인지를 나타냅니다. Forever에 체크하면 무한루프입니다.


6. Thread Group을 추가했으면, 이제 실제 Thread로서 어떤 동작을 하는지에 대한 설정을 추가합니다.
   먼저, 아래 그림처럼 Add > Config Element > HTTP Request Defaults 를 선택합니다.
   이 HTTP Request Defaults는 Thread가 HTTP 요청을 할 때 어떤 정보를 갖고 요청을 할것인지에 대한 전체적인 설정을 합니다.
  


7. HTTP Request Defaults를 추가하고, 아래 그림과 같이 설정을 합니다.
   여기에서 설정한 정보들은 Thread 들이 HTTP 요청을 할 때마다 적용이 되는 내용입니다.
   Name을 입력하고, Web Server 항목에 각 값을 입력합니다.
   Server Name or IP : 도메인명 또는 IP를 입력(전체 URL을 입력하지 않습니다.)
   Port Number : 포트 입력
   Timeouts 각 항목을 설정합니다.
   HTTP Request의 각 항목을 입력합니다.
   Path : 호출할 전체 URL에서 IP 또는 도메인명과 Port 를 제외한 나머지 URL을 입력합니다.
   Send Parameters With the Request : 호출할 URL에 넘겨줄 parameter를 설정합니다.



8. 이제, 실제 HTTP 요청을 날릴 개체를 추가합니다.
   아래 그림과 같이, Add > Sampler > HTTP Request를 선택합니다.


9. 아래 그림과 같이 나타나는데, 이 HTTP Request는 위에서 추가한 HTTP Request Defaults 라는 
   Config Element의 설정값들을 상속
받아서 사용하기 때문에, 따로 설정할 내용은 없습니다.



10. 이제 데이터 요청하는 개체를 만들었으니, HTTP 요청의 결과를 받는 개체들을 추가합니다.
     아래 그림과 같이, Add > Listener > View Results Tree, Add > Listener > Graphic Results 를 추가합니다.






11. 아래 그림과 같이 Listener들이 추가됩니다.


12. 실행을 위한 준비는 끝났고, 아래 그림과 같이 Run > Start 를 클릭하여 방금 추가한 Thread Group을 실행합니다.



13. 실행이 끝나고 나면, 아래 그림과 같이 View Results Tree를 선택하면,
     Thread가 실행한 각 요청(HTTP Request Sampler)마다 응답 데이터를 확인할 수 있습니다.



14. Graph Results를 선택하면 아래 그림과 같이, 각 요청마다의 처리 시간들에 대한 정보를 확인할 수 있습니다.

:
Posted by 뽀기
2009. 8. 19. 09:06

이런 스팸 메일이.... 생활/잡담2009. 8. 19. 09:06


거 참.

나는 동의하지도 않았는데, 동의한 것처럼 떡하니 메일을 보내다니..


이런건 어디에 신고를 해야 되는걸까요 -_-;

http://www.pointpark.com

이런데서 메일이 왔답니다. 예전에 누가 얘기해서 가입을 했다가, 탈퇴한걸로 기억을 하는데..

이상해서 확인을 해봤다는....


이름과 주민번호를 입력하고 ID 찾기를 했다.. 그러나.. 없다. -_-;


메일 주소를 보니.. 불특정 다수한테 보낸듯. 이런 쉬바로므들


가볍게.. 스팸신고 하고..
이거 저 사이트가서 항의하면 먹힐까요?.. 아니면, 우리는 모르는 일이다.. 대행업체에서 그랬나보다.. 라고 그럴까요..


'생활 > 잡담' 카테고리의 다른 글

현대해상 차세대 오픈....  (0) 2010.01.11
트위터... 가 대체 뭐야?  (0) 2009.09.16
이런 신문 기사가....  (0) 2009.06.08
삼가 고인의 명복을 빕니다...  (0) 2009.05.30
설 연휴 마지막 날의 출근 ㅜㅜ  (1) 2009.01.27
:
Posted by 뽀기
2009. 7. 28. 11:20

JCONSOLE 사용하기. 그거/Java2009. 7. 28. 11:20


1. jconsole을 사용하기 위한 환경 설정
2. 프로그램 실행 시 jconsole 연동을 위한 VM 옵션주기 


1. 환경 설정
  - %JAVA_HOME%/jre/lib/management/ 로 이동
  - jmxremote.password.template 파일을 복사하여 jmxremote.password 파일을 생성
  - jmxremote.password 파일의 제일 밑에 있는 아래 내용 주석 해제
    # monitorRole  QED
    # controlRole   R&D
  - jmxremote.password 파일을 읽기 전용으로 만든다.

2. 옵션 설정
  -Dcom.sun.management.jmxremote
  -Dcom.sun.management.jmxremote.port=8999
  -Dcom.sun.management.jmxremote.ssl=false
  -Dcom.sun.management.jmxremote.password.file=[passwordFilePath]/jmxremote.password


# jmxremote.password 파일 관련하여 에러 발생할 수 있음

   Password file read access must be restricted ........ 

   이런 에러 발생할 경우 아래와 같이 해준다.

   1. UNIX 환경
       $ chmod 444 jmxremote.password
   2. 윈도우 환경
       > cacls jmxremote.password /P Administrator:R

  
:
Posted by 뽀기
2009. 7. 18. 14:19

[ShutdownHook] 오랜만의 Java 포스팅.. 그거/Java2009. 7. 18. 14:19

예전에도 함 봤던것 같은데..
오늘 소스 리뷰하면서 다시 보게 되서 정리를 함 해본다..

Java 로 프로그램을 만들어서 돌리다 보면..
Ctrl+C 를 이용해서 프로그램이 종료되는 경우가 있다.
이런 경우에는 JVM 자체가 죽어버리기 때문에 해당 프로그램에서 종료 작업을 처리할 수 없게 된다.

하지만, ShutdownHook 이란걸 이용하면, Ctrl+C로 Java 프로그램을 종료시켜도 마무리(?) 작업을 할 수 있다.
프로그램의 종료를 감지할 ShutdownHook은 Thread 를 상속받아서 작성하고,
마무리 작업들은 run() 메소드안에 로직을 작성하면 된다.
그리고, 해당 ShutdownHook은 프로그램에서 Runtime.getRuntime().addShutdownHook() 을 이용하여 등록한다.

아래 예제 코드가 있다.
프로그램이 실행되면서 lock 파일을 생성하면, 다른 프로그램은 실행을 할 수 없도록 한다.
이미 실행중인 프로그램이 종료되면서 lock 파일을 삭제하면, 그제서야 다른 프로그램이 실행될 수 있도록 한다.

# Java Application

import java.io.File;
import java.io.IOException;

public class ShutdownHookDemo {
 private String lockFile = "./shutdownhook.lock";

 public ShutdownHookDemo() {
  // create a lock file
  File file = new File(lockFile);
  try {
   System.out.println("Creating lock file");
   if( file.exists() ) {
    System.out.println("lock file already exists.");
    System.exit(0);
   }

   file.createNewFile();
  }
  catch (IOException e) {
   System.out.println("Failed creating lock file.");
  }
 }

 private void init(){
  // ShutdownHook 등록
  ShutdownHook shutdownHook = new ShutdownHook(lockFile);
  Runtime.getRuntime().addShutdownHook(shutdownHook);
 }

 public static void main(String[] args) {
  ShutdownHookDemo demo = new ShutdownHookDemo();
  demo.init();
  try {
   while(true){
    int a = System.in.read();
    // 'q' 입력하면 프로그램 종료
    if( a == 113 ) break;
   }
  } catch(Exception e) {
   e.printStackTrace();
  }
 }
}

# ShutdownHook

import java.io.File;

class ShutdownHook extends Thread {
 String lockFile = null;
 
 public ShutdownHook(String lockFile) {
  this.lockFile = lockFile;
 }
 
 public void run() {
  shutdown();
 }
 
 private void shutdown() {
  System.out.println("Start shutdown progress.. please wait");
  // delete the lock file
  File file = new File(lockFile);
  if (file.exists()) {
   System.out.println("Deleting lock file. [" + lockFile + "]");
   file.delete();
  }
 }
}



 


# 실행 결과
1. 프로그램이 Ctrl+C로 인해 비정상 종료될 경우
C:\LuckyData\CIS\workspace\TEST>java -classpath C:\LuckyData\CIS\workspace\TEST\WebRoot\WEB-INF\classes ShutdownHookDemo
Creating lock file
^C

Start shutdown progress.. please wait
Deleting lock file. [./shutdownhook.lock]



2. 프로그램이 정상 종료될 경우
C:\LuckyData\CIS\workspace\TEST>java -classpath C:\LuckyData\CIS\workspace\TEST\WebRoot\WEB-INF\classes ShutdownHookDemo
Creating lock file
this is a test
hahahah
q
Start shutdown progress.. please wait
Deleting lock file. [./shutdownhook.lock]



=> ShutdownHook 은 프로그램이 종료될때 항상 실행된다는 걸 확인할 수 있다.


'그거 > Java' 카테고리의 다른 글

JMeter 사용하기...  (2) 2009.08.20
JCONSOLE 사용하기.  (0) 2009.07.28
RAC 환경에서 JDBC URL 설정  (0) 2009.06.02
log4j 사용해서 로깅하기  (0) 2009.01.15
[강추] JFace 예제 따라하기  (0) 2008.12.15
:
Posted by 뽀기
2009. 7. 9. 20:56

JavaScript String replace 그거/Tech2009. 7. 9. 20:56


오랜만에 JavaScript를 했더니.. 머리 쥐난다. -_-;
예전에 표준을 지키지 않고 코딩(?)하던 이후로는 거의 처음하는것 같은데..
좀 헤맸다는. ㅎㅎ

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head><title>TEST</title>
<script language="JavaScript">
<!--
function gogo() {
 var str="&lt;font size='3'&gt;This is test&lt;/font&gt;"
 // str에서 &lt; 를 모두 찾아서 < 로 치환
 var str2=str.replace(/\&lt;/g, "<");
 // str에서 &gt; 를 모두 찾아서 > 로 치환

 var str2=str2.replace(/\&gt;/g, ">");

 document.getElementById("str").value=str;
 document.getElementById("content").value=str2;
}
//-->
</script>
</head>
<body onLoad="javascript:gogo()">
 <textarea cols=50 rows=5 id="str"></textarea>
<br>
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
<form name="frm">
 <textarea cols=50 rows=5 id="content"></textarea>
</form>
</body>
</html>

# 결과

:
Posted by 뽀기
2009. 7. 8. 20:08

오랜만의 쉘 스크립트 그거/Tech2009. 7. 8. 20:08


# 프로시저의 결과를 쉘 스크립트에서 받기
#!/bin/sh

# run sqlplus with a 'callProc.sql' file
# in 'callProc.sql' file, print result of procedure by running 'dbms_output.put_line'
# get an output message by using 'grep'

# usage
# sqlplus <id>/<pw> @<sqlfile> | grep "<keyword>"

sqlplus hdmfdbm/hdmfdbm @callProc.sql | grep "l_num1="

####### sql file - callProc.sql #####################
#
# set serveroutput on
# declare
#   l_num1 number := 100;
#   l_num2 number := 101;
# begin
#   calc(l_num1, l_num2);
# end;
# /
# quit
#
####### sql file - callProc.sql #####################

####### procedure - calc ##########################
# create or replace procedure calc(
#   p_parm1 in out number,
#   p_parm2 in out number) as
#   test_temp number;
# begin
#   test_temp := p_parm1;
#   p_parm1 := p_parm2;
#   p_parm2 := test_temp;
#   dbms_output.putline('l_num1=' || l_num1);
# end calc;
####### procedure - calc ##########################


# 인자로 받은 문자열을 특정 파일에서 찾아서 라인번호 출력하기
#!/bin/sh

# set parameter(keyword) to grep in log file
# if matched, get line number of log file and save result]

# usage
# findString.sh <keyword1> <keyword2> <keyword3> ... <keywordN>

# change log file
logfilename='SF_LONG_COLLECT_AMT_CHA.log'
let i=0
set -A result

# check each keyword
for str in $@ ; do
  # get line number of matching line in log file
  linenum=`grep -n $str $logfilename | cut -d: -f1`

  # if matched, save result
  if [ "#$linenum" != "#" ] ; then
    result[$i]="$logfilename[$str]:$linenum"
    let i=i+1
  fi
done

i=0
while [ $i -lt ${#result[@]} -1 ]
do
  # print result
  echo ${result[$i]}
  let i=i+1
done


# properties 파일 읽기
#!/bin/sh

confFile="./config.properties"
KEY_USERID="USERID"
KEY_PASSWD="PASSWD"
KEY_SERVER_IP="SERVER_IP"
KEY_SERVER_PORT="SERVER_PORT"

# check if file exists
if [ ! -f $confFile ]; then
  echo "$confFile : does not exist"
  exit 1
# check if can read
elif [ ! -r $confFile ]; then
  echo "$confFile : can not read"
  exit 2
fi

 exec 0<$confFile
 while read line
 do
   isComment=`echo $line | cut -c 1-1`

   if [ $isComment != "#" ]; then
     key=`echo $line | cut -d= -f1`

       if [ $key = $KEY_USERID ]; then
         VALUE_USERID=`echo $line | cut -d= -f2`
       elif [ $key = $KEY_PASSWD ]; then
         VALUE_PASSWD=`echo $line | cut -d= -f2`
       elif [ $key = $KEY_SERVER_IP ]; then
         VALUE_SERVER_IP=`echo $line | cut -d= -f2`
       elif [ $key = $KEY_SERVER_PORT ]; then
         VALUE_SERVER_PORT=`echo $line | cut -d= -f2`
       fi
   fi
 done

echo "$KEY_USERID=$VALUE_USERID"
echo "$KEY_PASSWD=$VALUE_PASSWD"
echo "$KEY_SERVER_IP=$VALUE_SERVER_IP"
echo "$KEY_SERVER_PORT=$VALUE_SERVER_PORT"

#!/bin/sh

confFile="./config.properties"
KEY_USERID="USERID"
KEY_PASSWD="PASSWD"
KEY_SERVER_IP="SERVER_IP"
KEY_SERVER_PORT="SERVER_PORT"

# check if file exists
if [ ! -f $confFile ]; then
  echo "$confFile : does not exist"
  exit 1
# check if can read
elif [ ! -r $confFile ]; then
  echo "$confFile : can not read"
  exit 2
fi

VALUE_USERID=`grep $KEY_USERID $confFile | cut -d= -f2`
VALUE_PASSWD=`grep $KEY_PASSWD $confFile | cut -d= -f2`
VALUE_SERVER_IP=`grep $KEY_SERVER_IP $confFile | cut -d= -f2`
VALUE_SERVER_PORT=`grep $KEY_SERVER_PORT $confFile | cut -d= -f2`

echo "$KEY_USERID=$VALUE_USERID"
echo "$KEY_PASSWD=$VALUE_PASSWD"
echo "$KEY_SERVER_IP=$VALUE_SERVER_IP"
echo "$KEY_SERVER_PORT=$VALUE_SERVER_PORT"
:
Posted by 뽀기