커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 프로그래밍 / 개발 > 쉘 프로그래밍(shell script, 셀) 도움말
검색 : 사이트 WHOIS 웹서버 종류


  쉘스크립트에서 진수변환 작성일 : 2011/05/18 19:19
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 23214
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      제  목 : 쉘스크립트에서 진수변환
    작성일 : 2011.5.17(화)
    작성자 : 좋은진호(truefeel, http://coffeenix.net/ )


    1. 10진수로 변환하기(Hexadecimal, Octal, binary -> Decimal)

    sh와 bash는 쉘 자체에 진수 변환 기능이 있다. csh는 진수 변환이 없지만, 외부 명령으로 처리할 수있다.

    1) sh와 bash에서

      * 16진수 -> 10진수 : echo $((0x123))
      * 8진수  -> 10진수 : echo $((0123))

     
    $ echo $((0x123))
    291
    $ echo $((0xabc))
    2748
    $ echo $((0123))
    83
    $ echo $((0x123 + 0123))    <-- 4칙연산(+ - * /)과 나눗셈의 나머지(%)를 계산할 수 있다. (나눗셈은 몫만 표시)
    374
    $ echo $((0x123 % 0123))    <-- 291/83 으로 나눌 때의 나머지 42(291 = 83 X 3 + 42)
    42
     


    2) bash에서

    $((진수#숫자)) 형식으로 2~64진수에서 10진수로 변환이 가능하다.

      * 16진수 -> 10진수 : echo $((16#123))
      * 8진수  -> 10진수 : echo $((8#123))
      * 2진수  -> 10진수 : echo $((2#01101010))
      * 5진수  -> 10진수 : echo $((5#123))

     
    $ echo $((16#123))
    291
    $ echo $((16#abc))
    2748
    $ echo $((8#123))
    83
    $ echo $((2#01101010))
    106
    $ echo $((5#123))
    38
     


    4칙연산과 나머지 계산은 위와 동일하게 가능하다.

    3) csh에서

    자체 진수변환 기능을 제공하지 않으므로, bc 명령을 이용해서 한다.

    bc에는 ibase, obase라는 진수변환에 유용한 변수가 있다. ibase는 input base로 입력값이 무슨 진수인지를 지정한다. 반대로 obase는 output base로 출력값을 무슨 진수로 표시할 것인지를 지정한다.

    다음은 bc명령으로 16진수 123을 10진수로, 8진수 123을 10진수로 변환한 예이다.

     
    $ bc
    bc 1.06.95
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'.
    ibase=16;123
    291
    ibase=8 ;123
    83
    quit
    $
     


    쉘 스크립트에서 사용하려면 다음처럼 처리하면 된다.

    echo "ibase=16;123" | bc
    echo "ibase=8 ;123" | bc
    echo "ibase=16;ABC" | bc  <--- ABCDEF는 대문자만 가능


    2. 10진수를 다른 진수로 변환하기(Decimal -> Hexadecimal, Octal, binary)

    위의 csh 쉘에서 처럼 bc명령을 사용한다.

    각각 16진수, 8진수, 2진수로 변환한 예이다.
     
    $ echo "obase=16;100" | bc
    64
    $ echo "obase=8;100" | bc
    144
    $ echo "obase=2;100" | bc
    1100100
     


      커피닉스 카페 최근 글
    [11/06] World News Digest:
    [06/16] [질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
    [04/22] Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~