윈도우 쉘 - 기초 명령어

1. 쉘 프로그래밍
  • 윈도우에서는 배치 프로그램(*.bat), 리눅스에서는 쉘 스크립트(*.sh)
  • command.com(cmd.exe), /bin/bash 등의 명령어 해석기를 사용한다.
  • 명령어 해석기는 지정된 명령들을 순차적으로 실행한다.
  • 반복되는 명령의 단순화를 통해 내장 명령어의 빠른 실행으로 효율성을 극대화한다.
  • 쉘 프로그래밍을 통해 안전진단에서의 다양한 항목을 빠르게 점검이 가능하다.

2. 배치 프로그램 실행
콘솔창에서 실행 파일명 또는 실행 파일명.bat 으로 실행시킨다. 확장자를 생략할 수 있다.

3. 간단한 cmd 명령어
copy con a.bat
콘솔창에 입력한 값을 a.bat 파일에 덮어쓰기로 복사한다. ctrl+Z 눌린 후에 엔터를 눌린다.
cd c:\
cd는 경로를 이동한다.
dir /b
간결하게 파일명을 조회한다.
type 123.txt
파일 내용을 출력한다.
del 123.txt
파일을 삭제한다.
pause
일시정지.
cls
화면을 깨끗하게 지운다.
date /t
날짜를 출력한다.

4. ECHO
ECHO는 문자열을 출력하거나 명령어 반향을 설정한다.

echo hello!

  • 메모장에 echo hello! 를 입력하고 echo.bat 이라고 저장하여 cmd에서 실행한다.
  • 그러면 입력한 명령어와 hello!를 같이 출력된다.

@echo hello!

  • 메모장에 @echo hello! 를 입력하고 echo.bat 이라고 저장하여 cmd에서 실행한다.
  • 그러면 입력한 명령어는 생략하고, hello!만 출력된다.

@echo.

공백으로 줄을 바꾸는 개행과 같다.

@echo off

@echo off 아래에 있는 내용들은 명령어는 생략하고, world!만 출력된다.

5. 변수
윈도우 쉘 프로그래밍에서는 환경변수를 변수화하여 사용한다.

set

환경변수의 설정값을 볼 수 있다.


set 변수명 : 변수 선언
%변수명% : 선언된 변수를 사용


set /p 변수명 : 입력받은 문자를 변수에 대입
set /a 변수명 : 변수를 숫자형이나 연산할 때 사용

6. 변수 확장

간단한 환경변수 확장 명령어를 통해서 기본적인 문자열 치환 등이 가능하다.

1) 문자열 치환


콜론( : )은 조건을 의미하며, 변수 num에 있는 123을 abc로 바꾸겠다는 걸 의미한다.


치환할 값을 지정하지 않으면 삭제시켜 버린다.

2) 시작위치, 삭제


~은 시작 위치를 의미한다. ~3은 앞에서부터 네 번째 문자부터 출력하라는 뜻이다.
~0 : 제일 첫 문자부터
~1 : 두 번째 문자부터
~2 : 세 번째 문자부터
~3 : 네 번째 문자부터


마이너스는 '뒤에서부터'를 의미한다. ~-5는 뒤에서부터 문자 5개까지 출력하라는 뜻이다.


~0은 제일 첫 문자부터 출력한다. -5는 뒤에서부터 문자 5개를 삭제하는 걸 의미한다.


~1은 두 번째 문자부터 출력한다. 3은 앞에서부터 문자 3개를 출력하는 걸 의미한다.


~-5는 뒤에서부터 문자 5개를 출력하니 67890. 3은 앞에서부터 문자 3개만 출력하니 678.


~-3은 뒤에서부터 문자 3개를 출력하니 890. -1은 뒤에서부터 문자 1개를 삭제하니 89.

7. 매개변수
파일 실행 시 파일명과 함께 입력하는 확장 변수를 매개변수라고 한다. 매개변수는 띄어쓰기로 구분한다.


%0 : cmd 창에서 입력한 실행 파일명. 절대 경로라면 경로도 포함되서 들어가 있다.
%1 : 첫 번째 매개변수.
%2 : 두 번째 매개변수.
%3 : 세 번째 매개변수.
%* : %0(파일명)을 제외한 모든 매개 변수.

8. GOTO

goto는 :next가 있는 곳으로 바로 건너뛴다. 그래서 그 사이에 있는 echo 5는 실행되지 않았다.

9. CALL

call은 :next가 있는 곳으로 바로 건너뛰어서 끝까지 갔다가 다시 call 명령어가 있는 곳으로 돌아와서 순차적으로 실행한다. 결과물을 보면 처음에 echo 5를 건너뛰고, 마지막인 echo 4까지 실행하고 나서 다시 call :next 위치로 돌아와서 echo 5 → echo 3 → echo 4를 실행했다.

10. if
제어문으로 특정 조건이 참인지 거짓인지에 따라 명령어를 실행한다.


여기서는 여는 괄호를 같은 구문에 안 넣으면 에러가 발생한다. else도 여는 괄호를 같은 구문에 안 넣으면 에러가 발생한다.

if 조건조건이 참이면 수행
if not 조건조건이 거짓이면 수행
if exist 파일명파일이 존재하면 수행
if /i대소문자에 관계없이 문자열을 비교
if "str1"=="str2"문자열이 같으면 수행
if "str1"!==!"str2"문자열이 다르면 수행

조건1 EQU 조건2조건 1, 2가 같으면 수행 (equal)
조건1 NEQ 조건2조건 1, 2가 다르면 수행 (not equal)
조건1 LSS 조건2조건 1이 2보다 작으면 수행 (less)
조건1 LEQ 조건2조건 1이 2보다 작거나 같으면 수행 (less equal)
조건1 GTR 조건2조건 1이 2보다 크면 수행 (great)
조건1 GEQ 조건2조건 1이 2보다 크거나 같으면 수행 (great equal)

11. setlocal
지역 변수의 개념으로 현재 cmp창에서만 변수로 사용하겠다는 의미다. 만약 초기화도 시키지 않고, setlocal도 사용하지 않으면 변수의 값이 초기화가 되지않고 누적된다.

12. for
for문은 특정 범위의 조건이 종료될 때까지 루프하면서 명령어를 실행한다. 배치파일(bat 파일) 내에서 변수를 사용할 때는 %%변수명으로 사용해야 한다. cmd 창에서는 %변수명으로 사용한다.
for %변수명 in (범위) do ( 명령어 )


for /l %변수 in (초기값, 증가값, 최대값) do 명령증가(양수) 또는 감소(음수)하는 for문
for /f "옵션" %변수 in (파일명) do 명령파일 내용을 범위로 사용
for /f "옵션" %변수 in ("문자열") do 명령문자열을 범위로 사용
for /f "옵션" %변수 in ('명령어') do 명령명령 실행 결과를 범위로 사용


skip=숫자 : 무시할 행의 수
delims=문자 : 각 행의 구분자로, 설정이 없다면 기본적으로 공백으로 구분한다. "delims=" 를 사용하면 전부 출력한다.
tokens=범위 : 각 행에서 사용할 토큰으로 delims를 기준으로 범위를 나눈다.


"delims=1"를 사용하면 1를 기준으로 1의 앞까지 전부 출력한다. 1는 출력 대상에서 배제된다.
*은 전부를 의미한다.


tokens은 delims를 기준으로
1 = I
2 = love
3 = you

13. 수식
set /a 변수=수식
set B=5
set /a B=B+3
echo %B%
  • set /a B+=3 : B에 3을 더해서 새로운 B 값을 할당하므로 8
  • set /a B-=3 : B에 3을 빼서 새로운 B 값을 할당하므로 2
  • set /a B*=3 : B에 3을 곱해서 새로운 B 값을 할당하므로 15
  • set /a B/=3 : B를 3으로 나눈 몫을 새로운 B 값에 할당하므로 1
  • set /a B%=3 : B를 3으로 나눈 나머지를 새로운 B 값에 할당하므로 2

Comments