DOS 배치 파일을 쉘 스크립트로 변환하기

DOS 배치 파일을 쉘 스크립트로 변환하기

많은 프로그래머들이 DOS가 설치된 PC에서 스크립트를 처음 접했습니다. 제약이 많았던 DOS 배치 파일 언어로도 나름 강력한 스크립트나 간단한 애플리케이션을 만들 수 있었지만, 상당한 꼼수와 우회 기술을 사용해야 했습니다.

가끔 오래된 DOS 배치 파일을 UNIX 쉘 스크립트로 변환해야 하는 경우가 있으며, 이 작업은 보통 어렵지 않습니다. DOS 배치 파일에서 사용하는 연산자들은 대부분 쉘 스크립트의 일부 기능만 사용하고 있기 때문입니다.

배치 파일과 쉘 스크립트의 연산자 비교

Batch 파일Shell Script설명
%$명령행 인수(prefix)
/–명령 옵션
\/디렉터리 경로 구분자
===문자열 비교(같음)
!==!!=문자열 비교(같지 않음)
||파이프
@set +v명령어 표시 억제
**파일 와일드카드
>>출력 리다이렉션(덮어쓰기)
>>>>출력 리다이렉션(추가)
<<stdin 리다이렉션
%VAR%$VAR환경변수
REM#주석
NOT!조건 부정
NUL/dev/null출력 폐기
ECHOecho출력
ECHO.echo빈 줄 출력
FOR %%VAR IN (LIST) DOfor var in [list]; do반복문
:LABEL사용 없음레이블
GOTO함수 사용특정 위치로 이동
PAUSEsleep대기
CHOICEcase/select메뉴 선택
IFif조건문
IF EXIST[ -e filename ]파일 존재 여부
CALLsource 또는 .다른 스크립트 포함
SETexport환경 변수 설정
SHIFTshift인수 이동
ERRORLEVEL$?종료 상태


Bash 터미널 ls 명령 출력, 파일 디렉토리 목록
DOS Shell

DOS 명령과 UNIX 명령 비교

DOS 명령UNIX 명령설명
ASSIGNln링크 생성
ATTRIBchmod파일 권한 수정
CDcd디렉터리 이동
COPYcp파일 복사
DELrm파일 삭제
DIRls -l디렉터리 목록
MOVEmv이동/이름 변경
MDmkdir디렉터리 생성
TYPEcat파일 출력
XCOPYcp확장된 파일 복사

참고로 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년 업데이트)