Computer 그리고 Developer/dW

[dW] 초보자를 위한 유닉스 팁과 기교, Part 4

버리야 2009. 1. 29. 10:57
반응형

이 튜토리얼에선 본(Bourne) 셸 스크립트로 프로그래밍을 작성하여 처리하는 예제가 있습니다.
제가 모르는 것만 정리해 둡니다~ 더 자세한 내용은 링크를.. 이용해 주세요^^

주석 셸에서 # 기호는 주석 행을 뜻한다. (쓸일이 없어서 몰랐군..)

bc를 이용하여 진법 변환하기
bc는 임의의 정밀도를 제공하는 계산기 언어(arbitrary precision calculator language)로, 대다수 유닉스 배포판에서 제공한다. 출력 진법을 지정할 수 있으므로 10진법 이외에 다른 진법으로 결과를 출력할 때 유용하다.

인라인 입력
Here-document를 생성하려면 명령행에서 셸 연산자 <<와 제한 문자열(limit string)을 지정한다. 제한 문자열은 공백이 없는 한 어떤 문자열이라도 괜찮다.
$ cat << buriEND
buriEND라는 글자를 치기 전까지 계속~입력받는다.

here-document를 이용하여 셸 스크립트 사용법 정보를 출력할 수 있다.

셸 안에서 셸 실행하기
현재 셸에서 서브셸(subshell)이라는 새 셸을 띄운 후 명령이나 명령 목록을 실행하기도 한다. 서브셸을 띄우면 현재 셸은 서브셸의 부모가 된다. 서브셸은 부모 환경을 그대로 이어받는다. 자식 셸과 부모 셸 사이에 입출력 재지정도 가능하다. 하지만 서브셸은 부모 환경을 수정하지 못한다. 스크립트를 실행하는 셸 환경은 그대로 유지하면서 특정한 명령군을 실행하는 셸 환경만 바꾸고 싶다면 서브셸이 적합하다. 동시에 오래동안 돌아갈 백그라운드 프로세스를 여러 개 시작할 때도 서브셸이 적합하다. 한 셸에서 서브셸을 여러 개 띄울 수 있으며, 재귀적으로 각 서브셸이 다시 서브셸을 여럿 띄울 수 있다. 

키보드 입력 : read 명령

!!! Point!!! 유용한 한 줄짜리 셸 코드
  • 현재 디렉터리에서 파일 이름이 정확히 두 자인 파일을 모두 찾아 .ppm이라는 확장자를 추가한다.

    for i in ??; { mv $i $i.ppm; }
    

  • tar와 서브셸을 사용하여 디렉터리 트리 전체를 복사한다. 파일 권한은 그대로 유지한다.

    ( cd source ; tar pcf - * ) | ( cd target ; tar pxvf - )
    

  • 이진수를 읽어 십진수로 출력한다.

    read BINLOC;echo $((2#$BINLOC))
    

  • /usr/local 디렉터리에서 확장자가 .mp3인 파일을 모두 찾은 후 각 파일을 bzip2 유틸리티로 압축한다. 이름에 공백이 들어가는 파일도 포함한다.

    find /usr/local -name "*.mp3" | while read name ; do bzip2 $name; done
    

  • 파일에서 10진수 값 전부를 16진수로 출력한다.

    cat file | while read number ; do echo $((0x$number)); done
    

  • 파일에서 10진수 값 전부를 16진수로 변환하여 새로운 파일에 저장한다. 새 파일 이름은 원래 파일 이름에 .hex 확장자를 추가한다.

    cat file | while read number ; do echo $((0x$number)) >> file.hex; done
    

  • 루프를 열 번 돌면서 command를 추가한다. command 인수로 0, 10, 20, ..90까지 숫자를 넘긴다.

    i=0; while [ $i -ne 100 ]; do command $i; i=$(($i+10)); done





반응형