반응형
DOS 배치 파일을 쉘 스크립트로 변환하기
많은 프로그래머들이 DOS가 설치된 PC에서 스크립트를 처음 접했습니다. 제약이 많았던 DOS 배치 파일 언어로도 나름 강력한 스크립트나 간단한 애플리케이션을 만들 수 있었지만, 상당한 꼼수와 우회 기술을 사용해야 했습니다.
가끔 오래된 DOS 배치 파일을 UNIX 쉘 스크립트로 변환해야 하는 경우가 있으며, 이 작업은 보통 어렵지 않습니다. DOS 배치 파일에서 사용하는 연산자들은 대부분 쉘 스크립트의 일부 기능만 사용하고 있기 때문입니다.
배치 파일과 쉘 스크립트의 연산자 비교
| Batch 파일 | Shell Script | 설명 |
|---|---|---|
| % | $ | 명령행 인수(prefix) |
| / | - | 명령 옵션 |
| \ | / | 디렉터리 경로 구분자 |
| == | = | 문자열 비교(같음) |
| !==! | != | 문자열 비교(같지 않음) |
| | | | | 파이프 |
| @ | set +v | 명령어 표시 억제 |
| * | * | 파일 와일드카드 |
| > | > | 출력 리다이렉션(덮어쓰기) |
| >> | >> | 출력 리다이렉션(추가) |
| < | < | stdin 리다이렉션 |
| %VAR% | $VAR | 환경변수 |
| REM | # | 주석 |
| NOT | ! | 조건 부정 |
| NUL | /dev/null | 출력 폐기 |
| ECHO | echo | 출력 |
| ECHO. | echo | 빈 줄 출력 |
| FOR %%VAR IN (LIST) DO | for var in [list]; do | 반복문 |
| :LABEL | 사용 없음 | 레이블 |
| GOTO | 함수 사용 | 특정 위치로 이동 |
| PAUSE | sleep | 대기 |
| CHOICE | case/select | 메뉴 선택 |
| IF | if | 조건문 |
| IF EXIST | [ -e filename ] | 파일 존재 여부 |
| CALL | source 또는 . | 다른 스크립트 포함 |
| SET | export | 환경 변수 설정 |
| SHIFT | shift | 인수 이동 |
| ERRORLEVEL | $? | 종료 상태 |

DOS 명령과 UNIX 명령 비교
| DOS 명령 | UNIX 명령 | 설명 |
|---|---|---|
| ASSIGN | ln | 링크 생성 |
| ATTRIB | chmod | 파일 권한 수정 |
| CD | cd | 디렉터리 이동 |
| COPY | cp | 파일 복사 |
| DEL | rm | 파일 삭제 |
| DIR | ls -l | 디렉터리 목록 |
| MOVE | mv | 이동/이름 변경 |
| MD | mkdir | 디렉터리 생성 |
| TYPE | cat | 파일 출력 |
| XCOPY | cp | 확장된 파일 복사 |
참고로 UNIX 명령과 쉘 스크립트 기능은 DOS 명령보다 훨씬 강력하며, 옵션도 다양합니다. 또한 DOS는 * 와 ? 를 제외하면 와일드카드 기능도 매우 제한적입니다.
예제 1 — DOS 배치 파일
REM VIEWDATA
REM INSPIRED BY AN EXAMPLE IN "DOS POWERTOOLS"
@ECHO OFF
IF !%1==! GOTO VIEWDATA
FIND "%1" C:\BOZO\BOOKLIST.TXT
GOTO EXIT0
:VIEWDATA
TYPE C:\BOZO\BOOKLIST.TXT | MORE
:EXIT0
예제 2 — 변환된 쉘 스크립트
#!/bin/bash
# viewdata.sh
DATAFILE=/home/bozo/datafiles/book-collection.data
ARGNO=1
if [ $# -lt "$ARGNO" ]
then
less $DATAFILE
else
grep "$1" $DATAFILE
fi
exit 0
이처럼 변환된 스크립트는 더 짧고 명료하며, 원본 배치 파일보다 읽기 쉽습니다.
참고
- UNIX 쉘 스크립트는 DOS 파일 시스템(NTFS 포함)에도 접근할 수 있어, 굳이 배치 파일을 손보지 않고도 동일한 작업을 수행할 수 있습니다.
- 배치 파일을 더 세련되게 다듬으려는 시도가 있을 수 있지만, 쉘 스크립트로 변환하는 것이 훨씬 실용적입니다.
(2025년 업데이트)
반응형
'IT·디지털 > IT 개발자 팁' 카테고리의 다른 글
| [iOS] UIAlertView didDismissWithButtonIndex 문제, 지금은 어떻게 해결할까? (UIAlertController 기준) (0) | 2012.12.04 |
|---|---|
| 스마트폰 디바이스별 해상도 정리 (2025년 기준) (4) | 2012.08.22 |
| 안드로이드 MediaPlayer 최신 사용법 정리(2025 ver.) (0) | 2011.02.17 |
| 안드로이드 화면 회전 방지 방법 (최신 버전 기준) (0) | 2011.02.16 |
| Tab Layout / TabHost / TabActivity (1) | 2011.01.27 |